(四)模板方法学习
来源:互联网 发布:初学编程怎么学 编辑:程序博客网 时间:2024/04/20 01:24
//模板方法---多个子类,对于某一种流程,处理方法只有细微的差别,此时,可以将不同对象之间相同的处理,集中到其基类中处理,
//而有差别的地方,在子类中进行分别实现。
//定义一个抽象基类,其public接口:首先---实现公共的处理,然后---调用由子类必须实现的虚函数,实现差异化的处理----
//这里需要注意的是,要特别仔细的辨别算法中哪里部分是稳定的,不变的公共部分。否则一旦发现公共部分有些是特殊的,要调整到子类实现中,
//则会牵涉到大量的修改。
//在代码中,利用抽象基类指针动态绑定,可以在不修改客户代码,而实现不同的处理。
//模板方法将稳定的不变的行为搬移到基类,是减少子类代码的重复,还可以定义好算法的框架,而具体的实现延迟到子类中,使得子类不需要改变算法的结构,
//就可以重定义算法的实现步骤。
#include <string>
#include <iostream>
#include <memory>
using namespace std;
//定义抽象基类
class TestPaper
{
public:
void TestQuestion1() //公共接口中实现算法框架----公共处理流程 + 特殊处理(由子类去实现)---将算法的变化放在子类中
{
cout<<"Please write your answer for question 1: A, B, C, D"<<endl;
cout<<"----my answer is : "<<Answer1()<<endl;
}
void TestQuestion2()
{
cout<<"Question 2 have 4 choice, 1,2,3,4, give me your answer!"<<endl;
cout<<"-----my answer is : "<<Answer2()<<endl;
}
protected:
private:
virtual string Answer1() = 0; //定义纯虚函数,子类必须实现相应的操作
virtual string Answer2() = 0;
virtual string Answer3() = 0;
};
//定义子类,进行接口继承,实现有差别的处理。
class TestStudent1 : public TestPaper
{
private:
virtual string Answer1(){ return "A";}
virtual string Answer2(){ return "1";}
virtual string Answer3(){ return "B";}
};
class TestStudent2 : public TestPaper
{
private:
virtual string Answer1(){ return "C";}
virtual string Answer2(){ return "2";}
virtual string Answer3(){ return "xx";}
};
int main()
{
//类的客户代码中,只使用抽象基类的指针(引用),增加了灵活性。
std::tr1::shared_ptr<TestPaper> tp(new TestStudent1());
tp->TestQuestion1();
tp->TestQuestion2();
std::tr1::shared_ptr<TestPaper> tp2(new TestStudent2);
tp2->TestQuestion1();
tp2->TestQuestion2();
return 0;
}
- (四)模板方法学习
- Mysql++学习(四)------模板查询
- C++ 模板学习总结(四)函数模板
- django 学习 (四) 模板标签
- Django学习总结之四模板(待续)
- python web框架Django学习(四)模板查找机制
- 模板方法学习资源
- 模板方法模式学习
- 模板(四)
- 72 模板(四)
- 模板:排序(四)
- 学习ExtJS(四) Panel常用方法
- php学习笔记(四)魔术方法
- 四 设计模式之模板方法模式
- 模板方法--行为型模式之四
- J2EE (四) Servlet 模板方法模式
- 设计模式(四)---模板方法模式
- 设计模式之四:模板方法模式
- 第九周项目5
- 数据仓库数据挖掘——数据仓库模型设计
- NIO的理解
- 1.Linux基础操作:主题2 Shell的基本概念
- Hibernate关联关系配置(一对多、一对一和多对多)
- (四)模板方法学习
- LINUX下安装软件方法命令方法
- git命令学习(三)
- 写给自己的一封信
- CocosStudio学习【1】:环境搭建与介绍
- (五)Decorator模式学习
- leetcode - Longest Substring Without Repeating Characters
- MFC专用名词缩写
- 【leetcode 数组】Median of Two Sorted Arrays