设计模式之模板方法模式Template

 1.初识模板方法模式

从网站建设到定制行业解决方案,为提供成都网站设计、成都网站制作服务体系,各种行业企业客户提供网站建设解决方案,助力业务快速发展。成都创新互联公司将不断加快创新步伐,提供优质的建站服务。

读了这么多年书,大家或多或少都遇到过这样的情况吧:老师在黑板上写了一些题,让学生记下去,然后写答案在交上来。(还记得那个时候我近视看不清黑板的痛苦啊,那个时候我只能别人抄完了,我在照他们抄。)其实这就是模板方法模式能够解决的问题了,分析一下我们便知道大家每个人抄的题应该都是一样的吧,只有答案可能不一样,要是大家抄的选择题,那么不一样的东西就只有一个答案,区别可能就是A,B,C,D。可是每个人却都要抄一遍题,要是遇到一个我这样的近视,还可能把题抄错了。这就体现出来模板方法模式的重要性了,建立一个模板类,类中包括:模板方法和子类实现的方法。这里模板方法为题目+答案(调用类中的答案方法),子类实现的方法就是答案方法,这样做就避免了每个子类总都包含题目,使得每个子类中只需要包含答案。说恐怕怎么说也不直观,还是看看代码实现吧。

模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

2.模板方法模式应用举例

看看具体的模板类和具体实现是怎么实现的吧:

 
 
 
  1. class TestpaperTemplate
  2.  {
  3.  public :
  4.      void templateMethod()//模板方法,定义了要完成操作的骨架
  5.      {    
  6.          question1();
  7.          answer1();
  8.          question2();
  9.          answer2();
  10.      };
  11.      void question1()
  12.      {
  13.          cout<<"问题一:二叉树每个节点儿子节点数目有多少:\n";
  14.          cout<<"A.最多1个 B.最多两个 C.任意多个 D.至少一个";
  15.      };
  16.      void question2()
  17.      {
  18.          cout<<"问题二:完全二叉树叶子节点可能在哪一层:\n";
  19.          cout<<"A.任意一层 B.最后一层 C.最后两层 D.最后三层";
  20.      };
  21.  protected:
  22.      virtual void answer1();//这两个方法的具体实现延时到子类,因不同的类而不同
  23.      virtual void answer2();
  24.  };
  25.  
  26.  class StudentA :public TestpaperTemplate
  27.  {
  28.      virtual void answer1()
  29.      {
  30.          cout<<"答案:B"<
  31.      }
  32.      virtual void answer2()
  33.      {
  34.          cout<<"答案:A"<
  35.      }
  36.  };
  37.  class StudentB  :public TestpaperTemplate
  38.  {
  39.      //此处和StudentA中类似,只是每个学生选择的答案不同
  40.  };

这样一来,每个学生只需要写自己的答案就好了,避免抄题这种无用功了。

3.使用模板方法模式的场合和好处

模板方法模式是通过把不变的行为搬移到超类,去除子类中的重复代码来体现它的优势的。也就提供了一个很好的代码复用平台。如果以后遇到这种情况:有一个过程需要执行,这个过程包括一系列步骤,整个过程从高层次看是一样的,但是每个步骤的具体细节不一样,这时我们就可以考虑这种模板方法模式了。即当不变的行为和可变的行为在类中混在一起的时候,不变的行为就会在子类中重复出现,这是通过模板方法模式把这些行为搬移到单一的地方实现(超类),而把不同的部分在子类实现,这就使子类摆脱了重复的不变行为的困扰。 应用实例:HttpServlet类提供了一个service()方法.这个方法调用了一个或是多个do方法,完成对客户端发起的请求的处理,这些do方法则是由具体的HttpServlet类提供的.那么这里的service()方法就是一个摸板方法.

网站标题:设计模式之模板方法模式Template
链接分享:http://www.mswzjz.cn/qtweb/news31/283731.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能