模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
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;
}