筹划模式——模板方法模式

[复制链接]
发表于 2025-12-23 19:22:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
界说一个操纵中的算法框架,而将一些步调耽误到子类中,模版方法模式使得子类可以不改变算法布局即可重新界说算法的某些特定步调
1.长处:
在父类中界说一个算法,而右它的子类来实现细节处置惩罚,在子类实现具体的处置惩罚算法并不会改变算法中步调的实验次序
模版方法模式是一种代码复用技能,他在类库中筹划特殊紧张,它提取了类库中的公共活动,将公共活动放在父类,而通过其他子类来实现差别的活动,它鼓了我们适当利用继续来实当代码复用
可实现一种反向控制布局,通过子类覆盖父类的钩子方法来决定是否须要实验
在模版方法模式中可以通过子类来覆盖父类的根本方法,差别子类可以提供根本方法的差别实现,更换和增长新的子类很方便,符合单一职责和开闭原则
2.缺点
机动性较低:模板方法模式逼迫子类遵照父类界说的算法布局,子类只能在有限的步调上举行扩展,难以完全改变算法的布局。
高耦合性:模板方法模式大概导致父类和子类之间的耦合性较高,任何对父类的修改都有大概影响到全部子类,从而增长了维护的难度。
  1. #include<iostream>
  2. using namespace std;
  3. class DrinkTemplate
  4. {
  5. public:
  6.         virtual void BolidWater()=0;
  7.         virtual void Brew()=0;
  8.         virtual void PourCup()=0;
  9.         virtual  void AddSomething()=0;
  10.         void Make()
  11.         {
  12.                 BolidWater();
  13.                 Brew();
  14.                 PourCup();
  15.                 AddSomething();
  16.         }
  17. };
  18. class Coffee:public DrinkTemplate
  19. {
  20. public:
  21.         virtual void Brew()
  22.         {
  23.                 cout<<"冲泡咖啡"<<endl;       
  24.         }
  25.        
  26.         virtual void BolidWater()
  27.         {
  28.                 cout<<"煮水"<<endl;       
  29.         }
  30.         virtual void PourCup()
  31.         {
  32.                 cout<<"咖啡倒入杯子中"<<endl;       
  33.         }
  34.         virtual  void AddSomething()
  35.         {
  36.                 cout<<"加糖,加牛奶"<<endl;       
  37.         }
  38. };
  39. class Tea: public DrinkTemplate
  40. {
  41. public:
  42.         virtual void BolidWater()
  43.         {
  44.                 cout<<"煮水"<<endl;       
  45.         }
  46.         virtual void Brew()
  47.         {
  48.                 cout<<"冲泡铁观音"<<endl;       
  49.         }
  50.         virtual void PourCup()
  51.         {
  52.                 cout<<"茶倒入杯子中"<<endl;       
  53.         }
  54.         virtual  void AddSomething()
  55.         {
  56.                 cout<<"加蜂蜜"<<endl;       
  57.         }
  58. };
  59. void test()
  60. {
  61.         Tea * tea=new Tea;
  62.         tea->Make();
  63.         cout<<"  "<<endl;               
  64.         Coffee *coffee=new Coffee;
  65.         coffee->Make();
  66.        
  67. }
  68. int main()
  69. {
  70.         test();
  71.         return 0;       
  72. }
复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表