自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

設(shè)計(jì)模式之模板方法模式Template

開發(fā) 架構(gòu)
提到“模板”不知道別人想到的是什么,我想到的是可復(fù)用,與此提供同時(shí)可復(fù)用又是面向?qū)ο缶幊毯驮O(shè)計(jì)模式要達(dá)到的目的。所以模板方法模式作為一種設(shè)計(jì)模式也自然是理所應(yīng)當(dāng)?shù)睦?。其?shí),模板方法模式是一種比較簡(jiǎn)單的設(shè)計(jì)模式,看看具體的吧。

 1.初識(shí)模板方法模式

讀了這么多年書,大家或多或少都遇到過這樣的情況吧:老師在黑板上寫了一些題,讓學(xué)生記下去,然后寫答案在交上來。(還記得那個(gè)時(shí)候我近視看不清黑板的痛苦啊,那個(gè)時(shí)候我只能別人抄完了,我在照他們抄。)其實(shí)這就是模板方法模式能夠解決的問題了,分析一下我們便知道大家每個(gè)人抄的題應(yīng)該都是一樣的吧,只有答案可能不一樣,要是大家抄的選擇題,那么不一樣的東西就只有一個(gè)答案,區(qū)別可能就是A,B,C,D。可是每個(gè)人卻都要抄一遍題,要是遇到一個(gè)我這樣的近視,還可能把題抄錯(cuò)了。這就體現(xiàn)出來模板方法模式的重要性了,建立一個(gè)模板類,類中包括:模板方法和子類實(shí)現(xiàn)的方法。這里模板方法為題目+答案(調(diào)用類中的答案方法),子類實(shí)現(xiàn)的方法就是答案方法,這樣做就避免了每個(gè)子類總都包含題目,使得每個(gè)子類中只需要包含答案。說恐怕怎么說也不直觀,還是看看代碼實(shí)現(xiàn)吧。

模板方法模式:定義一個(gè)操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。

2.模板方法模式應(yīng)用舉例

看看具體的模板類和具體實(shí)現(xiàn)是怎么實(shí)現(xiàn)的吧:

  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<<"問題一:二叉樹每個(gè)節(jié)點(diǎn)兒子節(jié)點(diǎn)數(shù)目有多少:\n"
  14.          cout<<"A.最多1個(gè) B.最多兩個(gè) C.任意多個(gè) D.至少一個(gè)"
  15.      }; 
  16.      void question2() 
  17.      { 
  18.          cout<<"問題二:完全二叉樹葉子節(jié)點(diǎn)可能在哪一層:\n"
  19.          cout<<"A.任意一層 B.最后一層 C.最后兩層 D.最后三層"
  20.      }; 
  21.  protected
  22.      virtual void answer1();//這兩個(gè)方法的具體實(shí)現(xiàn)延時(shí)到子類,因不同的類而不同 
  23.      virtual void answer2(); 
  24.  }; 
  25.   
  26.  class StudentA :public TestpaperTemplate 
  27.  { 
  28.      virtual void answer1() 
  29.      { 
  30.          cout<<"答案:B"<<endl<<endl; 
  31.      } 
  32.      virtual void answer2() 
  33.      { 
  34.          cout<<"答案:A"<<endl<<endl; 
  35.      } 
  36.  }; 
  37.  class StudentB  :public TestpaperTemplate 
  38.  { 
  39.      //此處和StudentA中類似,只是每個(gè)學(xué)生選擇的答案不同 
  40.  }; 

這樣一來,每個(gè)學(xué)生只需要寫自己的答案就好了,避免抄題這種無用功了。

3.使用模板方法模式的場(chǎng)合和好處

模板方法模式是通過把不變的行為搬移到超類,去除子類中的重復(fù)代碼來體現(xiàn)它的優(yōu)勢(shì)的。也就提供了一個(gè)很好的代碼復(fù)用平臺(tái)。如果以后遇到這種情況:有一個(gè)過程需要執(zhí)行,這個(gè)過程包括一系列步驟,整個(gè)過程從高層次看是一樣的,但是每個(gè)步驟的具體細(xì)節(jié)不一樣,這時(shí)我們就可以考慮這種模板方法模式了。即當(dāng)不變的行為和可變的行為在類中混在一起的時(shí)候,不變的行為就會(huì)在子類中重復(fù)出現(xiàn),這是通過模板方法模式把這些行為搬移到單一的地方實(shí)現(xiàn)(超類),而把不同的部分在子類實(shí)現(xiàn),這就使子類擺脫了重復(fù)的不變行為的困擾。
應(yīng)用實(shí)例:HttpServlet類提供了一個(gè)service()方法.這個(gè)方法調(diào)用了一個(gè)或是多個(gè)do方法,完成對(duì)客戶端發(fā)起的請(qǐng)求的處理,這些do方法則是由具體的HttpServlet類提供的.那么這里的service()方法就是一個(gè)摸板方法.
責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2023-12-12 11:09:55

模板方法模式python設(shè)計(jì)模式

2013-11-26 17:15:13

Android設(shè)計(jì)模式

2021-06-16 08:56:06

模版方法模式設(shè)計(jì)模式行為型設(shè)計(jì)模式

2009-06-11 17:19:47

J2EE設(shè)計(jì)模式Template

2024-02-21 12:24:33

模板設(shè)計(jì)模式框架

2020-08-21 07:23:50

工廠模式設(shè)計(jì)

2023-10-27 08:34:46

PythonJava優(yōu)勢(shì)

2015-09-08 13:39:10

JavaScript設(shè)計(jì)模式

2012-01-13 15:59:07

2021-12-24 07:50:45

責(zé)任鏈模式設(shè)計(jì)

2023-09-04 13:14:00

裝飾器設(shè)計(jì)模式

2021-06-29 08:54:23

設(shè)計(jì)模式代理模式遠(yuǎn)程代理

2021-06-09 08:53:34

設(shè)計(jì)模式策略模式工廠模式

2012-02-29 09:41:14

JavaScript

2020-08-11 11:20:30

Typescript設(shè)計(jì)模式

2009-01-15 10:55:29

JavaScript設(shè)計(jì)模式抽象工廠

2022-03-25 11:01:28

Golang裝飾模式Go 語(yǔ)言

2021-09-16 06:44:05

組合模式設(shè)計(jì)

2010-04-13 08:54:28

PHP設(shè)計(jì)模式命令模式

2023-12-13 13:28:16

裝飾器模式Python設(shè)計(jì)模式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)