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

          主站蜘蛛池模板: 华容县| 阜阳市| 习水县| 台湾省| 武陟县| 武强县| 资溪县| 新化县| 喀什市| 襄垣县| 永吉县| 永春县| 兴化市| 曲阳县| 佛学| 葵青区| 离岛区| 武功县| 洪雅县| 大埔县| 象山县| 察哈| 鱼台县| 泸州市| 枝江市| 壶关县| 青川县| 阿克苏市| 吉水县| 渭源县| 休宁县| 德保县| 汽车| 山东省| 渝北区| 高州市| 凤翔县| 丽江市| 马龙县| 延川县| 丰都县|