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

    評論

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

    主站蜘蛛池模板: 亚洲国产精品无码久久一线| 婷婷亚洲天堂影院| 亚洲丁香色婷婷综合欲色啪| 国产成人自产拍免费视频| www.亚洲色图.com| 污污视频免费观看网站| 亚洲Av无码乱码在线观看性色 | 香蕉视频亚洲一级| 国产免费av片在线无码免费看| 边摸边吃奶边做爽免费视频99| 亚洲成AⅤ人影院在线观看| 亚洲天堂免费在线视频| 永久亚洲成a人片777777| 鲁丝片一区二区三区免费| 亚洲激情视频在线观看| 国产无人区码卡二卡三卡免费| 亚洲国产精品免费观看| 日韩一品在线播放视频一品免费| 精品国产亚洲AV麻豆| 在线亚洲精品福利网址导航| 久久99热精品免费观看动漫| 亚洲欧洲高清有无| 成人免费毛片视频| 一区二区免费在线观看| 亚洲韩国—中文字幕| 四虎在线免费播放| 伊人久久大香线蕉免费视频| 亚洲综合小说久久另类区| 国产精品久久香蕉免费播放| 美女无遮挡拍拍拍免费视频| 亚洲黄色在线电影| 国产免费午夜a无码v视频| 老司机69精品成免费视频| 亚洲精品无码不卡在线播放| 国产亚洲色视频在线| 日韩精品无码区免费专区| 国产精品1024在线永久免费 | 久久久久亚洲av无码专区导航| 四虎www免费人成| 国产午夜成人免费看片无遮挡| 亚洲Av高清一区二区三区|