<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怎么沒有定義啊? 不好意思  回復  更多評論
      

    主站蜘蛛池模板: 久久免费视频网站| 国产高清对白在线观看免费91 | 在线观看www日本免费网站| 亚洲综合最新无码专区| 青青青视频免费观看| mm1313亚洲精品国产| 美女被吸屁股免费网站| 亚洲成A人片在线观看无码3D| 国产精品亚洲片在线花蝴蝶| 免费午夜爽爽爽WWW视频十八禁| 蜜桃传媒一区二区亚洲AV| 日本免费人成黄页在线观看视频| 亚洲国产精品无码第一区二区三区| 大香人蕉免费视频75| 欧美亚洲国产SUV| 亚洲国产一区明星换脸| 国产免费区在线观看十分钟| 情人伊人久久综合亚洲| 99久久精品免费视频| 亚洲一级毛片在线播放| 日本高清免费不卡在线| 一区视频免费观看| 国产精品亚洲一区二区三区在线| 日韩免费观看一区| 日木av无码专区亚洲av毛片| 国产福利免费观看| 午夜免费啪视频在线观看 | 亚洲视频精品在线| aⅴ在线免费观看| 色欲aⅴ亚洲情无码AV蜜桃| 亚洲精品无码久久不卡| 十八禁在线观看视频播放免费| 337p日本欧洲亚洲大胆色噜噜| 99久久免费国产精品特黄| 国产精品久久久久久亚洲影视| 亚洲精品你懂的在线观看| 国产又大又粗又长免费视频 | 亚洲中文字幕在线观看| 在线观看www日本免费网站| 国产精品亚洲色图| 亚洲VA中文字幕无码一二三区|