介绍
定义一个操作的算法骨架,而将一些步骤延迟到子类中。此模式可以使得不改变算法的结构,而改变一些特定的步骤。
参与者
AbstractClass 抽象类
ConcereteClass 具体实现
比如,我们将大象放到某个物体里。
实现代码
#include <iostream>
class PlaceElp {
public:
void PlaceElpInObj()
{
OpenObj();
PutElpInObj();
CloseObj();
}
virtual void OpenObj() = 0;
virtual void PutElpInObj() = 0;
virtual void CloseObj() = 0;
};
class Fridge : public PlaceElp{
public:
void OpenObj()
{
std::cout<<"打开冰箱"<<std::endl;
}
void PutElpInObj()
{
std::cout<<"把大象放进去"<<std::endl;
}
void CloseObj()
{
std::cout<<"关上冰箱"<<std::endl;
}
};
int main()
{
PlaceElp *obj = new Fridge();
obj->PlaceElpInObj();
return 0;
}
输出
打开冰箱
把大象放进去
关上冰箱
特点
- 代码复用
- 钩子操作,提供了缺省的行为
参考
《设计模式,可复用面向对象软件设计的基础》