多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

中國最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2

shejimoshi教程

模板模式

閱讀 (2143)

模板模式

在模板模式(Template Pattern)中,一個抽象類公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但調用將以抽象類中定義的方式進行。這種類型的設計模式屬于行為型模式。

介紹

意圖:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。

主要解決:一些方法通用,卻在每一個子類都重新寫了這一方法。

何時使用:有一些通用的方法。

如何解決:將這些通用算法抽象出來。

關鍵代碼:在抽象類實現,其他步驟在子類實現。

應用實例: 1、在造房子的時候,地基、走線、水管都一樣,只有在建筑的后期才有加壁櫥加柵欄等差異。 2、西游記里面菩薩定好的 81 難,這就是一個頂層的邏輯骨架。 3、Spirng 中對 Hibernate 的支持,將一些已經定好的方法封裝起來,比如開啟事務、獲取 Session、關閉 Session 等,程序員不重復寫那些已經規范好的代碼,直接丟一個實體就可以保存。

優點: 1、封裝不變部分,擴展可變部分。 2、提取公共代碼,便于維護。 3、行為由父類控制,子類實現。

缺點:每一個不同的實現都需要一個子類來實現,導致類的個數增加,使得系統更加龐大。

使用場景: 1、有多個子類共有的方法,且邏輯相同。 2、重要的、復雜的方法,可以考慮作為模板方法。

注意事項:為防止惡意操作,一般模板方法都加上 final 關鍵詞。

實現

我們將創建一個定義操作的 Game 抽象類,其中,模板方法設置為 final,這樣它就不會被重寫。CricketFootball 是擴展了 Game 的實體類,它們重寫了抽象類的方法。

TemplatePatternDemo,我們的演示類使用 Game 來演示模板模式的用法。

模板模式的 UML 圖

步驟 1

創建一個抽象類,它的模板方法被設置為 final。

Game.java

public abstract class Game {
   abstract void initialize();
   abstract void startPlay();
   abstract void endPlay();

   //模板
   public final void play(){

      //初始化游戲
      initialize();

      //開始游戲
      startPlay();

      //結束游戲
      endPlay();
   }
}

步驟 2

創建擴展了上述類的實體類。

Cricket.java

public class Cricket extends Game {

   @Override
   void endPlay() {
      System.out.println("Cricket Game Finished!");
   }

   @Override
   void initialize() {
      System.out.println("Cricket Game Initialized! Start playing.");
   }

   @Override
   void startPlay() {
      System.out.println("Cricket Game Started. Enjoy the game!");
   }
}

Football.java

public class Football extends Game {

   @Override
   void endPlay() {
      System.out.println("Football Game Finished!");
   }

   @Override
   void initialize() {
      System.out.println("Football Game Initialized! Start playing.");
   }

   @Override
   void startPlay() {
      System.out.println("Football Game Started. Enjoy the game!");
   }
}

步驟 3

使用 Game 的模板方法 play() 來演示游戲的定義方式。

TemplatePatternDemo.java

public class TemplatePatternDemo {
   public static void main(String[] args) {

      Game game = new Cricket();
      game.play();
      System.out.println();
      game = new Football();
      game.play();     
   }
}

步驟 4

驗證輸出。

Cricket Game Initialized! Start playing.
Cricket Game Started. Enjoy the game!
Cricket Game Finished!

Football Game Initialized! Start playing.
Football Game Started. Enjoy the game!
Football Game Finished!
關閉
程序員人生
主站蜘蛛池模板: 成人国产视频在线观看 | 香蕉tv亚洲专区在线观看 | 高清免费a级在线观看国产 高清免费国产在线观看 | 东京干男人都知道 | 国产精品欧美一区二区三区不卡 | 欧洲精品一区二区三区 | 国产aⅴ精品一区二区三区久久 | 99国产精品农村一级毛片 | 久久国产视频一区 | 亚洲欧美在线视频免费 | 欧美人与物videos另 | 噜啪啪 | 手机看片福利视频 | 亚洲www色| 日本网站在线 | 国产成人午夜性a一级毛片 国产成人系列 | japanese中文字幕 | 小说区视频区图片区 | 欧美日韩一二 | 欧美精品黄页免费高清在线 | 亚洲视频在线免费看 | 国产xx在线观看 | 精品在线播放 | 毛片资源站 | 国产真实女人一级毛片 | 最近免费字幕中文大全在线观看 | 亚洲网站在线 | 最近更新中文字幕在线 | jizz成熟丰满中文字幕 | 顶级欧美色妇xxxxbbbb | 国产成人免费不卡在线观看 | jjzz韩国| 综合久久久久久 | 欧美亚洲h在线一区二区 | 欧美亚洲另类久久综合 | 午夜国产精品不卡在线观看 | 日本免费新一区二区三区 | 日韩欧美毛片免费观看视频 | 亚洲国产视频在线观看 | 国产成人欧美 | 91色久|