美文网首页
五、外观模式 模板模式

五、外观模式 模板模式

作者: Myth52125 | 来源:发表于2017-08-07 22:12 被阅读0次

外观模式

提供管理某一类具有对象的一层封装

比如要完成某一工作,需要同时协同某几个对象。为了防止频繁的调用一大堆代码。所以再写一个类,然后封装他们。
其实感觉就像一个函数而已。
例如编译器,他会预处理、编译、汇编、链接。但我们有时候要直接得到最终结果,并不关心过程。
同时我们有时又可以逐项执行。
也好比我们有时候写好多的小函数,然后最后写一个大函数去执行这些小函数。使这些小函数可以复用。

//job共同的基类
class job
{
public:
  virtual void do()=0;
};

//同时还有job1、2、3、4等等。
class job1:public job
{
public:
  virtual void do();
};

class DoJob
{
public:
  DoJob();
  void addJob(job* j);
  void doJob();
  void removeJob(int i);
private:
    vector<job*> _list;
};

为什么使用一个抽象基类?其实好像也不用是吧?
不是的,根据依赖倒置,需要这样做。

其中如果仅仅需要默认的功能那么其DoJob默认构造函数里可以提供。
如果需要执行不同的功能,那么我们不要构造函数,然后自己添加也可以。

如果说仅仅是为了执行一堆对象的某一系列操作,而这些操作本身就没有什么统统的特征,也就是说没有共同的一个基类,那么就没有必要使用抽象层。

模板模式

模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤

嗯,就是说,实现一个功能,需要多个步骤,而每个步骤用的工具又可能是不同的。所以那,基类先定义一个完成功能步骤的算法框架。然后子类根据选用工具的不同去实现这一些功能。

比如说,编译器:预处理->编译->汇编->连接。假设,我使用不同的编译器,那他的处理步骤是相同的啊。所以不同的编译器,继承编译器这个基类,然后去实现自己的功能。但是总的算法的框架是不变的。

UML

模板模式

代码

class compiler
{
public:
  virtual void doit()
  {
    pretreatment();
    compile();
    assembly();
    link();
  }
private:
  virtual void pretreatment()=0;
  virtual void compile()=0;
  virtual void assembly()=0;
  virtual void link()=0;    
};

//具体的子类
class Gun:public compiler
{
//具体实现
};

模板模式和外观模式很相似,都是封装函数,不同的是外观模式封装的是不同对象的函数。

相关文章

网友评论

      本文标题:五、外观模式 模板模式

      本文链接:https://www.haomeiwen.com/subject/xaaalxtx.html