<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    silvermyth

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      1 隨筆 :: 12 文章 :: 1 評論 :: 0 Trackbacks
    命令模式是一種應用比較廣泛的模式,它的最核心思想是命令的接受者和執行者獨立,從而大大降低了代碼的耦合度。舉個例子,我家小朋友晚上睡覺前對媽媽(命令接受者)說第二天早上要吃蒸雞蛋羹(發送命令);對于小朋友來說最重要的就是第二天早上一醒來看到桌上有一碗雞蛋羹,而她根本不關心這是誰做的(誰執行的相關命令),媽媽親自做的也好,爸爸愛心奉獻的也好,飯店里買的也不是不可以。
    在適配器模式中我們提到,Garin新交了個女朋友,他每天都會收到如下命令:
    1 public interface Command {
    2     public void execute();
    3 }
    其中一部分是做飯,一部分是洗衣服;Garin必須親自完成嗎,不一定:
     1 public class CookCommand implements GirlFriendCommand {
     2 
     3     private String mealName = null;
     4     
     5     public CookCommand(String mealName) {
     6         super();
     7         this.mealName = mealName;
     8     }
     9 
    10     private MealSupplier mealSupplier = null;
    11     
    12     public void setMealSupplier(MealSupplier mealSupplier) {
    13         this.mealSupplier = mealSupplier;
    14     }
    15 
    16     @Override
    17     public void execute() {
    18         mealSupplier.cook(mealName);
    19     }
    20 
    21 }
    真正完成做飯的是一個抽象的MealSupplier.
    1 public interface MealSupplier {
    2     public void cook(String name);
    3 }
    它可能代表的是一個飯店:
     1 public class Restaurant implements MealSupplier{
     2     
     3     public Restaurant() {
     4         super();
     5     }
     6 
     7     @Override
     8     public void cook(String name) {
     9         System.out.println("飯店燒好了"+name);
    10     }
    11     
    12 }
    同樣的,真正洗衣服的是抽象的CanWash.
     1 public class WashCommand implements GirlFriendCommand {
     2 
     3     private CanWash wash = null;
     4     
     5     public void setWash(CanWash wash) {
     6         this.wash = wash;
     7     }
     8 
     9     @Override
    10     public void execute() {
    11         if(wash != null){
    12             wash.washClothes();
    13         }
    14     }
    15 
    16 }
    它代表的可能是洗衣機:
    1 public interface CanWash {
    2     public void washClothes();
    3 }

    1 public class WashingMachine implements CanWash {
    2 
    3     @Override
    4     public void washClothes() {
    5         System.out.println("洗衣機洗好了衣服");
    6     }
    7 
    8 }
    Garin要做的就是坐等命令,如何執行完全不管:
     1 public class GirlFriendCommandTest {
     2 
     3     /**
     4      * @param args
     5      */
     6     public static void main(String[] args) {
     7         BoyFriend bf = new BoyFriend("Garin");
     8         
     9         bf.addCommand(new CookCommand("魚香肉絲"));
    10         bf.addCommand(new WashCommand());
    11         bf.action();
    12     }
    13 
    14 }
    執行完命令后效果如下:
    Garin開始執行命令
    飯店燒好了魚香肉絲
    洗衣機洗好了衣服
    posted on 2015-07-28 21:22 Gavin Li 閱讀(231) 評論(1)  編輯  收藏 所屬分類: 設計模式

    評論

    # re: 閑話Java設計模式三:命令模式 2015-08-04 08:58 Philip
    BoyFriend怎么沒有定義啊? 不好意思  回復  更多評論
      

    主站蜘蛛池模板: 亚洲狠狠色丁香婷婷综合| 国产亚洲欧美在线观看| a级成人免费毛片完整版| 亚洲福利精品电影在线观看| 午夜亚洲国产精品福利| 亚洲а∨天堂久久精品| 又硬又粗又长又爽免费看| 亚洲精品国产精品国自产观看| 免费一级毛片在线播放放视频| 亚洲?V乱码久久精品蜜桃| 国产黄在线播放免费观看| 久久影院亚洲一区| 久久免费国产精品一区二区| 亚洲爆乳无码专区| 97视频热人人精品免费| 亚洲精品国产suv一区88| 免费人成在线观看网站视频| 成在线人视频免费视频| 西西人体44rt高清亚洲| 亚洲w码欧洲s码免费| 亚洲国产aⅴ成人精品无吗| 亚洲免费无码在线| 久久免费视频99| 亚洲资源最新版在线观看| 日韩在线看片免费人成视频播放| 婷婷亚洲综合五月天小说在线 | 十八禁视频在线观看免费无码无遮挡骂过 | 亚洲国产日韩在线视频| 日韩免费高清大片在线| 亚洲一区二区三区在线网站| 国产日产成人免费视频在线观看 | 免费专区丝袜脚调教视频| 亚洲熟女综合色一区二区三区 | 大妹子影视剧在线观看全集免费 | 亚洲Aⅴ在线无码播放毛片一线天| 亚洲精品成人片在线观看| 最近中文字幕高清免费中文字幕mv| 亚洲一区二区三区国产精品无码| 韩国二级毛片免费播放| 国产免费AV片在线观看| 亚洲av永久无码天堂网|