Template(模板)设计模式
2015-12-06 21:50
381 查看
声明:本博文篇幅短,适合review。
一、概念
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
二、模式结构图
class AbstractClass
{
public:
virtual ~AbstractClass();
void templateMethod(){
this->primitive1();
this->primitive2();
}
protected:
virtual void primitive1() = 0;
virtual void primitive2() = 0;
AbstractClass();
};
class ConcreteClass1 : public AbstractClass
{
public:
ConcreteClass1();
~ConcreteClass1();
protected:
void primitive1();
void primitive2();
};
class ConcreteClass2 : public AbstractClass
{
public:
ConcreteClass2();
~ConcreteClass2();
protected:
void primitive1();
void primitive2();
};
void main(){
AbstractClass * p1 = new ConcreteClass1();
AbstractClass * p2 = new ConcreteClass2();
p1->templateMethod();
p2->templateMethod();
}
三、例子
class FormatPicture
{
public:
virtual ~FormatPicture();
void transform(){
this->read();
this->save();
}
protected:
void read(){
cout<<"读取其他格式的图片 "<<endl;
}
virtual void save() = 0;
FormatPicture();
};
class FormatPNG : public FormatPicture
{
public:
FormatPNG();
~FormatPNG();
protected:
void save(){
cout<<"保存为png。。。"<<endl;
}
};
class FormatJPG : public FormatPicture
{
public:
FormatJPG();
~FormatJPG();
protected:
void save(){
cout<<"保存为jpg。。。"<<endl;
}
};
void main(){
FormatPicture * f1 = new FormatPNG();
FormatPicture * f2 = new FormatJPG();
f1->transform();
f2->transform();
}
四、优缺点
1、优点
a、提高了代码复用性。
b、符合开闭原则,依赖倒置原则。
2、缺点
a、每个不同的实现都需要定义一个子类,这会导致类的个数增加。
一、概念
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
二、模式结构图
class AbstractClass
{
public:
virtual ~AbstractClass();
void templateMethod(){
this->primitive1();
this->primitive2();
}
protected:
virtual void primitive1() = 0;
virtual void primitive2() = 0;
AbstractClass();
};
class ConcreteClass1 : public AbstractClass
{
public:
ConcreteClass1();
~ConcreteClass1();
protected:
void primitive1();
void primitive2();
};
class ConcreteClass2 : public AbstractClass
{
public:
ConcreteClass2();
~ConcreteClass2();
protected:
void primitive1();
void primitive2();
};
void main(){
AbstractClass * p1 = new ConcreteClass1();
AbstractClass * p2 = new ConcreteClass2();
p1->templateMethod();
p2->templateMethod();
}
三、例子
class FormatPicture
{
public:
virtual ~FormatPicture();
void transform(){
this->read();
this->save();
}
protected:
void read(){
cout<<"读取其他格式的图片 "<<endl;
}
virtual void save() = 0;
FormatPicture();
};
class FormatPNG : public FormatPicture
{
public:
FormatPNG();
~FormatPNG();
protected:
void save(){
cout<<"保存为png。。。"<<endl;
}
};
class FormatJPG : public FormatPicture
{
public:
FormatJPG();
~FormatJPG();
protected:
void save(){
cout<<"保存为jpg。。。"<<endl;
}
};
void main(){
FormatPicture * f1 = new FormatPNG();
FormatPicture * f2 = new FormatJPG();
f1->transform();
f2->transform();
}
四、优缺点
1、优点
a、提高了代码复用性。
b、符合开闭原则,依赖倒置原则。
2、缺点
a、每个不同的实现都需要定义一个子类,这会导致类的个数增加。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- myTemplate模板引擎
- PropertyChangeListener简单理解
- 关于指针的一些事情
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- c++ primer 第五版 笔记前言
- 架构纵横谈之二 ---- 架构的模式与要点
- share_ptr的几个注意点
- BS项目中的CSS架构_仅加载自己需要的CSS
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- 关于三种主流WEB架构的思考
- C++联合体转换成C#结构的实现方法
- Android操作系统的架构设计分析