<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      設計模式之模板方法模式(三分鐘學會一個設計模式)

      模板方法模式(Template Method Pattern)也稱之為模板模式(Template Pattern),是設計模式中最簡單的模式之一。

      先來看定義:
      定義一個操作中算法的骨架(模板),將一些步驟延遲到子類中,模板方法使得子類可以不改變算法的結構即可重新定義算法某些特定的步驟。
      這個定義還是有一些晦澀,我的理解是這樣的:(防盜連接:本文首發自http://www.rzrgm.cn/jilodream/ )
      在父類中我們可以定義一塊業務的整體實現過程,但是針對某些步驟的具體實現邏輯,我們可以暫時先只定義一個抽象方法,在未來定義子類的過程中,實現/重寫該方法。
      這個模式主要是為了解決,很多場景中,我們并不知道未來實際使用中,具體需要怎么實現,甚至會出現多個具體實現,針對此,我們可以先定義父類中已經明確的業務。
      大致的調用結構如下:

      它是面向對象的23種設計模式中的一種,屬于行為模式的范圍。
      來看示例代碼:

      音樂播放器抽象類

       1 package com.example.demo.learn.pattern.behavior.templatemethod;
       2 
       3 import lombok.extern.slf4j.Slf4j;
       4 
       5 /**
       6  * @discription
       7  */
       8 @Slf4j
       9 public abstract class AbstractMusicPlayer {
      10     public void startUp() {
      11         showFrame();
      12         doCustomizedOpt();
      13     }
      14 
      15     protected abstract void playWelcomeMsg();
      16 
      17     protected void showFrame() {
      18         showMainFrame();
      19         playWelcomeMsg();
      20     }
      21 
      22     protected abstract void doCustomizedOpt();
      23 
      24 
      25     protected abstract void showMainFrame();
      26 }

      酷貓播放器

       1 package com.example.demo.learn.pattern.behavior.templatemethod;
       2 
       3 import lombok.extern.slf4j.Slf4j;
       4 
       5 /**
       6  * @discription
       7  */
       8 @Slf4j
       9 public class CoolCatPlayer extends AbstractMusicPlayer{
      10     @Override
      11     protected void playWelcomeMsg() {
      12       log.warn("hi man");
      13     }
      14 
      15     @Override
      16     protected void doCustomizedOpt() {
      17         log.warn("您有一份價值99元的免費禮品待領取,快點擊下方鏈接");
      18     }
      19 
      20     @Override
      21     protected void showMainFrame() {
      22         log.warn("打開酷貓音樂主界面");
      23     }
      24 }

      酷他音樂盒

       1 package com.example.demo.learn.pattern.behavior.templatemethod;
       2 
       3 import lombok.extern.slf4j.Slf4j;
       4 
       5 /**
       6  * @discription
       7  */
       8 @Slf4j
       9 public class CoolHePlayer extends AbstractMusicPlayer {
      10     @Override
      11     protected void playWelcomeMsg() {
      12         log.warn("歡迎來到酷他音樂盒");
      13     }
      14 
      15     @Override
      16     protected void doCustomizedOpt() {
      17         log.warn("一刀999,和兄弟一起戰個痛快");
      18     }
      19 
      20     @Override
      21     protected void showMainFrame() {
      22         log.warn("打開酷他音樂盒主界面");
      23     }
      24 }

      執行主類

       1 package com.example.demo.learn.pattern.behavior.templatemethod;
       2 
       3 /**
       4  * @discription
       5  */
       6 
       7 public class PatternMain {
       8     public static void main(String[] args) {
       9         AbstractMusicPlayer coolCat = new CoolCatPlayer();
      10         coolCat.startUp();
      11 
      12         AbstractMusicPlayer coolHe = new CoolHePlayer();
      13         coolHe.startUp();
      14     }
      15 }

      輸出如下

      15:38:12.515 [main] WARN com.example.demo.learn.pattern.behavior.templatemethod.CoolCatPlayer - 打開酷貓音樂主界面
      15:38:12.518 [main] WARN com.example.demo.learn.pattern.behavior.templatemethod.CoolCatPlayer - hi man
      15:38:12.518 [main] WARN com.example.demo.learn.pattern.behavior.templatemethod.CoolCatPlayer - 您有一份價值99元的免費禮品待領取,快點擊下方鏈接
      15:38:12.518 [main] WARN com.example.demo.learn.pattern.behavior.templatemethod.CoolHePlayer - 打開酷他音樂盒主界面
      15:38:12.518 [main] WARN com.example.demo.learn.pattern.behavior.templatemethod.CoolHePlayer - 歡迎來到酷他音樂盒
      15:38:12.518 [main] WARN com.example.demo.learn.pattern.behavior.templatemethod.CoolHePlayer - 一刀999,和兄弟一起戰個痛快

      我們定義了一個播放器的類,并且約定了播放器啟動時,我們需要具體做的業務:

      類圖

      步驟1、打開主界面

      步驟2、做一些定制的用戶操作
      但是有多個播放器(如酷貓音樂、酷他音樂盒),他們的主界面和用戶定制操作都各有不同,因此我們可以先只定義以上操作的抽象方法,對于具體操作的實現留給子類完成即可。

      模板方法核心的步驟就是2點:
      父類中定義骨架(模板),組織各種定義好的抽象方法
      子類根據實際業務實現抽象方法

       

      posted @ 2024-09-07 15:44  王若伊_恩賜解脫  閱讀(320)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 强奷白丝美女在线观看| 成人国产精品日本在线观看| 国产精品高清国产三级囯产AV| 久久精品娱乐亚洲领先| 久久国产免费观看精品3| 亚洲中文字幕日产无码成人片| 西西人体44www大胆无码| 国产美女直播亚洲一区色| 亚洲午夜精品毛片成人播放| 午夜无码国产18禁| 亚洲最大日韩精品一区| 欧美老少配性行为| 在线中文字幕亚洲日韩2020| 九龙坡区| 亚洲成av人片天堂网| 国产稚嫩高中生呻吟激情在线视频| 亚欧美闷骚院| 国产精品黄色片| 91久久亚洲综合精品成人| 91超碰在线精品| 狠狠色噜噜狠狠狠狠av不卡| 色悠悠成人综合在线视频| 最新亚洲精品国偷自产在线| 成人午夜大片免费看爽爽爽| 国产自在自线午夜精品| 成在线人视频免费视频| 免费国产一区二区不卡| 亚洲成人一区二区av| 国产一区二区三区在线观看免费| 色哟哟网站在线观看| 久久91精品牛牛| 国内自拍偷拍福利视频看看| 制服丝袜国产精品| 怡春院久久国语视频免费| 国产色一区二区三区四区| 2021亚洲va在线va天堂va国产| 乱码中文字幕| 粉嫩一区二区三区精品视频| 日本一区二区三区四区黄色| 久热re这里精品视频在线6| 亚洲国产精品一区二区三|