日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
設(shè)計(jì)模式之模板方法模式Template

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

從網(wǎng)站建設(shè)到定制行業(yè)解決方案,為提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作服務(wù)體系,各種行業(yè)企業(yè)客戶提供網(wǎng)站建設(shè)解決方案,助力業(yè)務(wù)快速發(fā)展。成都創(chuàng)新互聯(lián)公司將不斷加快創(chuàng)新步伐,提供優(yōu)質(zhì)的建站服務(wù)。

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

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

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

看看具體的模板類(lèi)和具體實(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<<"問(wèn)題一:二叉樹(shù)每個(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<<"問(wèn)題二:完全二叉樹(shù)葉子節(jié)點(diǎn)可能在哪一層:\n";
  19.          cout<<"A.任意一層 B.最后一層 C.最后兩層 D.最后三層";
  20.      };
  21.  protected:
  22.      virtual void answer1();//這兩個(gè)方法的具體實(shí)現(xiàn)延時(shí)到子類(lèi),因不同的類(lèi)而不同
  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中類(lèi)似,只是每個(gè)學(xué)生選擇的答案不同
  40.  };

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

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

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


文章標(biāo)題:設(shè)計(jì)模式之模板方法模式Template
地址分享:http://www.dlmjj.cn/article/coocdpj.html