模板方法模式
2015-08-06 19:45
253 查看
定义一个操作中算法的骨架,而将一些步骤延迟到子类中。 模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
UML图:
优点:实现了代码复用;
缺点:算法骨架不易升级,模板与子类间耦合性高,修改模板,子类也会受到影响。
C++代码实现:
//模板方法模式
#include<iostream>
#include<string>
using namespace std;
class TestPaper
{
public:
void Question1(){cout<<"1+1="<<endl;}
void Question2(){cout<<"1+2="<<endl;}
virtual void begin(){}
virtual void Answer1(){}
virtual void Answer2(){}
};
class Student1:public TestPaper
{
public:
void begin(){cout<<"LiLei"<<endl;}
void Answer1(){Question1(); cout<<"2"<<endl;}
void Answer2(){Question2(); cout<<"3"<<endl;}
};
class Student2:public TestPaper
{
public:
void begin(){cout<<"HanMeiMei"<<endl;}
void Answer1(){Question1(); cout<<"2"<<endl;}
void Answer2(){Question2(); cout<<"2"<<endl;}
};
int main()
{
TestPaper *tp;
tp=new Student1();
tp->begin();
tp->Answer1();
tp->Answer2();
tp=new Student2();
tp->begin();
tp->Answer1();
tp->Answer2();
return 0;
}
UML图:
优点:实现了代码复用;
缺点:算法骨架不易升级,模板与子类间耦合性高,修改模板,子类也会受到影响。
C++代码实现:
//模板方法模式
#include<iostream>
#include<string>
using namespace std;
class TestPaper
{
public:
void Question1(){cout<<"1+1="<<endl;}
void Question2(){cout<<"1+2="<<endl;}
virtual void begin(){}
virtual void Answer1(){}
virtual void Answer2(){}
};
class Student1:public TestPaper
{
public:
void begin(){cout<<"LiLei"<<endl;}
void Answer1(){Question1(); cout<<"2"<<endl;}
void Answer2(){Question2(); cout<<"3"<<endl;}
};
class Student2:public TestPaper
{
public:
void begin(){cout<<"HanMeiMei"<<endl;}
void Answer1(){Question1(); cout<<"2"<<endl;}
void Answer2(){Question2(); cout<<"2"<<endl;}
};
int main()
{
TestPaper *tp;
tp=new Student1();
tp->begin();
tp->Answer1();
tp->Answer2();
tp=new Student2();
tp->begin();
tp->Answer1();
tp->Answer2();
return 0;
}
相关文章推荐
- curl转让query string逃生参数
- IOC原理解释
- Binary Search Tree
- Android学习路线——渐进
- lua_code_cache开关
- 我好换一个博客了
- 关于Character的digit,forDigit,getNumericValue方法的一点理解
- 我好换一个博客了
- JAVA项目1:聊天
- 【USACO OPEN 10】hop
- poj 1274 最大流或二分图,匈牙利算法
- 2015 多校联赛 ——HDU5353(构造)
- hibernate SQL Error: 8152, SQLState: 22001
- 反转一个单向链表
- poj-3687 Labeling Balls
- 2015 多校联赛 ——HDU5353(构造)
- Lua笔记7-闭包2
- nyoj 67 三角形面积【三角形面积公式】
- Linux平台日常运维管理
- Java之String类