<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 閱讀(232) 評論(1)  編輯  收藏 所屬分類: 設計模式

    評論

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

    主站蜘蛛池模板: 成人免费午夜无码视频| 久久成人免费大片| 最新仑乱免费视频| 亚洲视频一区在线播放| 精品熟女少妇av免费久久| 91精品国产亚洲爽啪在线影院| 青青草原1769久久免费播放| 亚洲大片在线观看| 真人做A免费观看| 亚洲色大成网站www永久男同 | 国产精品亚洲lv粉色| 国产传媒在线观看视频免费观看| 亚洲AV无码国产精品永久一区| jjzz亚洲亚洲女人| 中文字幕成人免费高清在线视频| 亚洲精品无码专区在线在线播放| 免费国产午夜高清在线视频| 亚洲人成电影亚洲人成9999网 | 久久久久免费看黄a级试看| 亚洲黄色在线观看| 国产精品无码免费播放| 国产精品自拍亚洲| 亚洲精品亚洲人成人网| 青娱分类视频精品免费2| 亚洲国产精品成人综合色在线| 免费大黄网站在线看| 最近免费mv在线观看动漫| 亚洲最大在线观看| 国产一级淫片a视频免费观看| 久久精品免费网站网| 亚洲人成日本在线观看| 又黄又大又爽免费视频| 久操免费在线观看| 99亚偷拍自图区亚洲| 久久亚洲2019中文字幕| 精品免费人成视频app| 美女免费精品高清毛片在线视| 亚洲国产精品无码一线岛国| 久久精品a一国产成人免费网站| 人成免费在线视频| 亚洲中字慕日产2021|