吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1563|回复: 5
收起左侧

[C&C++ 转载] 设计模式之template method

[复制链接]
denislov 发表于 2020-2-16 23:10

因为最近在看设计模式,所以来记录分享一下。
今天我分享的是23种设计模式中的template method模式。先来看看我们啥时候会对这种模式产生需求。
我们在很多场景中会遇到这种模式。比如说android开发里四大组件之Activity,当我们写一个活动类的时候都会去继承这个Activity类,你应该发现了,我们会去override它的一些方法,比如说onCreate(),onStart(),onStop(),onDestroy(),等等。
但我们并不知道一个Activity从头到尾到底是如何运行,只知道在特定的时候Activity提供了一些我们可以override的接口。这里我们可以得知,它的从头到尾如何运行出来的算法是稳定的,而当中不稳定的地方就是我们重写的那些子模块,如上的那些onCreate()等等。
在面对对象windows开发当中,很多人也会发现这个现象,就是你写一个程序依赖与一个库,而这个库只是让你实现它指定的部分,而它内部的逻辑却看不到。
我们看个代码,不过只是伪码,当然,大家应该能看明白。

// 库开发人员提供的一个库
class Library{
public:
 void step1(){
 // do somethings... 稳定的
 }
 void step3(){
 // do somethings... 稳定的
 }
};
// 应用开发人员写主函数
void step2(){
//需要应用开发人员根据业务需求自己写,所以不稳定。
}
void  step4(){ 
//同step2()
}
int main(){
      Library lib;
      //算法代码块
      lib->step1();
      if (step2())
     {
           step3();
           for (int i= 0;i<4;i++)
            step4();
      }
//假如通过这几个步骤,即这个算法能显示一个dialog。是一个相对稳定的部分.
    return 0;
}

现在我们看这个代码,其实设计模式就是不稳定中把稳定的剥离出来。这个例子很短,可能大家觉得没必要找出啥稳定的部分。比如说库开发人员提供了一个业务功能,该功能实现起来的算法十分麻烦,但其中逻辑十分稳定,并且你实际也无需知道算法具体能容,只是希望库能提供一些接口让你实现功能部分的自定义,这时候就需要template method了,看代码:

class Library {
public :
 void step1(){
  //do something...
  }
virtual void step2() = 0;
  void  step3(){ 
  // do something...
  }
  virtual void step4() = 0;
  void show(){
  step1();
  if (step2())
  {
       step3();
       for (int i= 0;i<4;i++)
       step4();
  }
}
};

class MainDialog :public Library{
      virtual void  step2() override {
      // do something
      }
      virtual void step4() override {
       // do something..
      }
};  

int main(){
      MainDialog dialog;
      dialog.show();
      return 0;
}

大家可以自行体会一下这样的妙用,就到这里,谢谢。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

fight775 发表于 2020-2-16 23:35
刚好准备学设计模式,题主加油
 楼主| denislov 发表于 2020-2-16 23:37
fight775 发表于 2020-2-16 23:35
刚好准备学设计模式,题主加油

回城里了有电脑了,我会写具体点
wd12aa 发表于 2020-2-17 00:48
 楼主| denislov 发表于 2020-2-17 01:39
wd12aa 发表于 2020-2-17 00:48
系统学习更好,这个得有基础吧

其实设计模式的代码很容易看懂,但如何做到有一个好的面向对象设计很难
wd12aa 发表于 2020-2-20 00:25
denislov 发表于 2020-2-17 01:39
其实设计模式的代码很容易看懂,但如何做到有一个好的面向对象设计很难

哦,谢谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 21:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表