行为设计模式---模板方法模式(Template Method)
2014-09-30 07:57
483 查看
模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
Template.h
#ifndef _TEMPLATE_H_
#define _TEMPLATE_H_
class Account
{
public:
virtual void start() = 0;
virtual void allow() = 0;
virtual int MaxLimit() = 0;
void withdraw(int);
};
class AccountNormal : public Account
{
public:
virtual void start();
virtual void allow();
virtual int MaxLimit();
};
class AccountPower : public Account
{
public:
virtual void start();
virtual void allow();
virtual int MaxLimit();
};
#endif
Template.cpp
#include <iostream>
#include "Template.h"
using std::cout;
using std::endl;
void Account::withdraw(int account)
{
start();
int limit = MaxLimit();
if (account < limit)
allow();
else
cout << "not allow" << endl;
}
void AccountNormal::start()
{
cout << "AccountNormal start" << endl;
}
void AccountNormal::allow()
{
cout << "AccountNormal allow" << endl;
}
int AccountNormal::MaxLimit()
{
return 3000;
}
void AccountPower::start()
{
cout << "AccountPower start" << endl;
}
void AccountPower::allow()
{
cout << "AccountPower allow" << endl;
}
int AccountPower::MaxLimit()
{
return 8000;
}
main.cpp
#include "Template.h"
int main()
{
AccountNormal normal;
normal.withdraw(2000);
AccountPower power;
power.withdraw(9000);
return 0;
}
Template.h
#ifndef _TEMPLATE_H_
#define _TEMPLATE_H_
class Account
{
public:
virtual void start() = 0;
virtual void allow() = 0;
virtual int MaxLimit() = 0;
void withdraw(int);
};
class AccountNormal : public Account
{
public:
virtual void start();
virtual void allow();
virtual int MaxLimit();
};
class AccountPower : public Account
{
public:
virtual void start();
virtual void allow();
virtual int MaxLimit();
};
#endif
Template.cpp
#include <iostream>
#include "Template.h"
using std::cout;
using std::endl;
void Account::withdraw(int account)
{
start();
int limit = MaxLimit();
if (account < limit)
allow();
else
cout << "not allow" << endl;
}
void AccountNormal::start()
{
cout << "AccountNormal start" << endl;
}
void AccountNormal::allow()
{
cout << "AccountNormal allow" << endl;
}
int AccountNormal::MaxLimit()
{
return 3000;
}
void AccountPower::start()
{
cout << "AccountPower start" << endl;
}
void AccountPower::allow()
{
cout << "AccountPower allow" << endl;
}
int AccountPower::MaxLimit()
{
return 8000;
}
main.cpp
#include "Template.h"
int main()
{
AccountNormal normal;
normal.withdraw(2000);
AccountPower power;
power.withdraw(9000);
return 0;
}
相关文章推荐
- 设计模式二十三:template method(模板方法)——类行为模式
- 【设计模式】行为模式之Template Method模板方法
- 【设计模式基础】行为模式 - 6 - 模板方法(Template Method)
- 【设计模式学习笔记二十四】【行为模式】【模板方法(Template Method)】
- 设计模式之模板方法模式(Template Method)
- 设计模式学习笔记(十六)——Template Method模板方法模式
- 设计模式学习笔记(二十四)——Template Method模板方法
- 行为模式 - 模板方法(Template Method)
- 极速理解设计模式系列:20.模板方法模式(Template Method Pattern)
- 设计模式:模板方法模式(Template Method)
- 设计模式C++学习笔记之九(Template Method模板方法模式)
- Java设计模式—模板方法(Template Method)
- 设计模式学习-Template Method(模板方法)
- 设计模式学习笔记(十六)——Template Method模板方法模式
- 设计模式----Template Method(模板方法)
- java设计模式---Template Method模板方法---实际处理交给子类
- 设计模式 - Template Method模式(模板方法模式)
- 深入浅出设计模式-009:模板方法模式(Template Method Pattern)
- 设计模式----Template Method(模板方法)
- C#设计模式——模板方法(Template Method)