大话设计模式-模板方法模式
2016-01-13 19:39
218 查看
定义:
模板方法(TemplateMethod)模式: 定义一个操作中的算法的骨架,
而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结
构即可重定义该算法的某些特定的步骤。
特点:
把不变行为搬移到超类,去除子类中的代码来体现其优势。模板方法
其实就是提供了一个很好的代码复用平台。
当不变和可变的行为在子类的实现中混合在一起的时候,不变的行为就
会在子类中重复出现,我们通过模板方法模式将这些不变的行为搬移到一
个单独的地方,这样就帮助子类摆脱了重复的不变行为的纠缠。
模板方法模式是通过把不变行为转移到基类,去除子类中的重复代码来
体现它的优势。模板方法模式就是提供了一个很好的代码复用平台。当不
变的和可变的行为在子类的方法中混合出项时,不变的行为就会在子类中
重复出现,我们通过模板方法模式把这些行为搬移到单一的地方,这样就
帮助子类摆脱重复的部分。
模板方法(TemplateMethod)模式: 定义一个操作中的算法的骨架,
而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结
构即可重定义该算法的某些特定的步骤。
特点:
把不变行为搬移到超类,去除子类中的代码来体现其优势。模板方法
其实就是提供了一个很好的代码复用平台。
当不变和可变的行为在子类的实现中混合在一起的时候,不变的行为就
会在子类中重复出现,我们通过模板方法模式将这些不变的行为搬移到一
个单独的地方,这样就帮助子类摆脱了重复的不变行为的纠缠。
模板方法模式是通过把不变行为转移到基类,去除子类中的重复代码来
体现它的优势。模板方法模式就是提供了一个很好的代码复用平台。当不
变的和可变的行为在子类的方法中混合出项时,不变的行为就会在子类中
重复出现,我们通过模板方法模式把这些行为搬移到单一的地方,这样就
帮助子类摆脱重复的部分。
class TestPaper { public: void TestQuestion1() { cout << " 杨过得到,后来给了郭靖,炼成倚天剑、屠龙刀的玄铁可能是[ ] a.球磨铸铁 b.马口铁 c.高速合金钢 d.碳素纤维 " << endl; cout << "答案:" << Answer1() << endl; } void TestQuestion2() { cout << " 杨过、程英、陆无双铲除了情花,造成[ ] a.使这种植物不再害人 b.使一种珍稀物种灭绝 c.破坏了那个生物圈的生态平衡 d.造成该地区沙漠化 " << endl; cout << "答案:" << Answer2() << endl; } void TestQuestion3() { cout << " 蓝凤凰的致使华山师徒、桃谷六仙呕吐不止,如果你是大夫,会给他们开什么药[ ] a.阿司匹林 b.牛黄解毒片 c.氟哌酸 d.让他们喝大量的生牛奶 e.以上全不对 " << endl; cout << "答案:" << Answer3() << endl; } protected: virtual string Answer1() { return ""; } virtual string Answer2() { return ""; } virtual string Answer3() { return ""; } }; //学生甲抄的试卷 class TestPaperA : public TestPaper { protected: virtual string Answer1() { return "b"; } virtual string Answer2() { return "c"; } virtual string Answer3() { return "a"; } }; //学生乙抄的试卷 class TestPaperB : public TestPaper { virtual string Answer1() { return "c"; } virtual string Answer2() { return "a"; } virtual string Answer3() { return "a"; } }; int main() { cout << "学生甲抄的试卷:" << endl; TestPaper * studentA = new TestPaperA(); studentA->TestQuestion1(); studentA->TestQuestion2(); studentA->TestQuestion3(); cout << "学生乙抄的试卷:" << endl; TestPaper * studentB = new TestPaperB(); studentB->TestQuestion1(); studentB->TestQuestion2(); studentB->TestQuestion3(); return 0; }
相关文章推荐
- poj openjudge 1036 gugle seating
- QT搭建UNP开发环境
- IOS APN的push证书转换
- 抓包工具Fidder详解
- 数据先加载还是先展示?
- Hibernate 开发简介-helloworld
- Java [Leetcode 198]House Robber
- Xcode7适配iOS9遇到的一些问题及解决办法
- 小丁带你走进git的世界二-工作区暂存区分支
- UIButton设置图片和文字
- 对HTTPS的理解
- C++11标准库chrono
- java socket编程
- linux shell 札记
- 机器学习 —— 概率图模型(马尔科夫与条件随机场)
- 常用sql总结
- OpenJudge_P6047 分蛋糕(DP)
- Java数据结构的使用之LinkedHashMap
- Oracle中的自定义函数
- 静态库