设计模式之Template Method模式(模板方法模式)
2016-06-02 13:46
295 查看
模板方法模式总结起来就是灵活运用C++的多态性,灵活运用普通函数,虚函数,纯虚函数的组合,
打个比方,每个人每天的生活都不一样,老师要上课,学生要学习,程序员要编程,但是每个人都需要吃饭与休息,这样我们就可以吧吃饭与休息抽出了,在父类里面强制实现,不同的部分放在子类里面具体实现。在这里为了方便,就把函数的实现写在类里面了,就没有单独写在cpp文件里面了。
1.定义公共功能的实现,无论学生,老师,还是程序员,他们都是人,都需要吃饭与休息,这里可以定义父类,把吃饭与休息的功能在父类里面用普通函数强制实现,当然用虚函数也可以,只要不在子类里面实现就行,
如果需要在父类里面实现的功能还是建议使用普通函数强制实现。
2.定义子类,也就是不同的功能,在子类里面实现,比如学生,老师,程序员,他们的工作都不一样,需要在子类里面具体实现父类里的work功能。
实际调用可以再使用一次Facade模式进行封装,这里就不在赘述。模板设计模式就是灵活运用C++多态的特性,巧妙组合函数来进行实现。
打个比方,每个人每天的生活都不一样,老师要上课,学生要学习,程序员要编程,但是每个人都需要吃饭与休息,这样我们就可以吧吃饭与休息抽出了,在父类里面强制实现,不同的部分放在子类里面具体实现。在这里为了方便,就把函数的实现写在类里面了,就没有单独写在cpp文件里面了。
1.定义公共功能的实现,无论学生,老师,还是程序员,他们都是人,都需要吃饭与休息,这里可以定义父类,把吃饭与休息的功能在父类里面用普通函数强制实现,当然用虚函数也可以,只要不在子类里面实现就行,
class People { public: void eat()//父类里面实现的功能强制实现 { printf("吃饭\n"); } void sleep() { printf("休息\n"); } virtual void work()=0; //纯虚函数在子类里面实现 };
如果需要在父类里面实现的功能还是建议使用普通函数强制实现。
2.定义子类,也就是不同的功能,在子类里面实现,比如学生,老师,程序员,他们的工作都不一样,需要在子类里面具体实现父类里的work功能。
class student:public People { public: void work() //子类可以使用普通函数使用 { printf("我是学生,我要上学!!!\n"); } }; class teacher:public People { public: void work() { printf("我是老师,我要上课!!!\n"); } }; class programmer:public People { public: void work() { printf("我是程序员,我要写代码!!!\n"); } };3.实际调用,就是多态的实现
People* stu=new student(); stu->eat(); stu->work(); stu->sleep(); People* teach=new teacher(); teach->eat(); teach->work(); teach->sleep(); People* prog=new programmer(); prog->eat(); prog->work(); prog->sleep();
实际调用可以再使用一次Facade模式进行封装,这里就不在赘述。模板设计模式就是灵活运用C++多态的特性,巧妙组合函数来进行实现。
相关文章推荐
- java io流
- HTML页面上获取鼠标的位置(备忘)
- 前端发送的多层嵌套json解析
- 什么是第一,第二,第三范式
- ADC模数转换器工作原理及分类
- 使用Fiddler对iPhone苹果手机进行数据抓包分析
- Spring Boot笔记
- 分类器的评估与选择
- IIS 启用w3wp.exe调试 没有找到w3wp进程
- AndroidStudio配置SVN以及使用代码管理
- C#—实验9.6和9.7
- Oracle数据库两种操作
- C语言的指针(进阶篇章之一)
- NEFU 115 斐波那契的整除
- CF 开车找房子
- RHRL7.0安装RAC11.2.0.4----Error in invoking target 'agent nmhs' of makefile '/u01/app/oracle/product/1
- IPv6进阶
- 源码编译php-5 报错整理
- redisDB
- 阿里云ECS—wordpress配置(主题/页脚/流量)