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

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

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

    隨筆 - 37  文章 - 29  trackbacks - 0


    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    最新評論

    閱讀排行榜

    評論排行榜

    14、COMMAND—俺有一個MM家里管得特別嚴(yán),沒法見面,只好借助于她弟弟在我們倆之間傳送信息,她對我有什么指示,就寫一張紙條讓她弟弟帶給我。
    這不,她弟弟又傳送過來一個COMMAND,為了感謝他,我請他吃了碗雜醬面,哪知道他說:"我同時給我姐姐三個男朋友送COMMAND,就數(shù)你最小氣,才請我吃面。",:-(

    命令模式:命令模式把一個請求或者操作封裝到一個對象中。命令模式把發(fā)出命令的責(zé)任和執(zhí)行命令的責(zé)任分割開,委派給不同的對象。
    命令模式允許請求的一方和發(fā)送的一方獨立開來,使得請求的一方不必知道接收請求的一方的接口,更不必知道請求是怎么被接收,以及操作是否執(zhí)行,
    何時被執(zhí)行以及是怎么被執(zhí)行的。系統(tǒng)支持命令的撤消。

     

     



    典型的Command模式需要有一個接口.接口中有一個統(tǒng)一的方法,這就是"將命令/請求封裝為對象":
    public interface Command {
        public abstract void execute ( );
    }


    《Java與模式》一書中的例子如下:
    /**
     * 客戶端(Client)代碼
     */
    public class Client {
        public static void main(String[] args) {
            Receiver receiver = new Receiver();
            Command command = new ConcreteCommand(receiver);
            Invoker invoker = new Invoker(command);
            invoker.action();
        }
    }
    /**
     * 請求者(Invoker)角色代碼
     */
    public class Invoker {
        private Command command;
        public Invoker(Command command) {
            this.command = command;
        }
        public void action() {
            command.execute();
        }
    }
    /**
     * 接收者(Receiver)角色代碼
     */
    public class Receiver {
        public Receiver() {
            //write code here
        }
        public void action() {
            System.out.println(""Action has been taken);
        }
    }
    /**
     * 抽象命令角色由Command接口扮演
     */
    public class Command {
        void execute();
    }
    /**
     * 具體命令類
     */
    public class ConcreteCommand implements Command {
        private Receiver receiver;
        public ConcreteCommand(Receiver receiver) {
            this.receiver = receiver;
        }
        public void execute() {
            receiver.action();
        }
    }


    再用某公司寫的Command模式,簡化代碼寫個大概樣子:
    /**
     * 客戶端(Client)代碼
     */
    public class Client {
        public static void main(String[] args) {
            String receiverName = "xAO";
            String methodName = "methodA";
            
            //receiverName這里用Spring的依賴注入來創(chuàng)建Receiver對象
            Command command = new ConcreteCommand(receiverName);
            command.getParameters.put("method", methodName);   //實際代碼做了封裝,并不是這樣直接寫的。這里簡化一下
            command.getParameters.put("param1", "param1"); //傳遞參數(shù)
            command.getParameters.put("param2", "param2");
            
            Result result = getNewInvoker.execute(command); //創(chuàng)建Invoker對象,并調(diào)用receiver執(zhí)行最終的方法
        }
    }
    /**
     * 請求者(Invoker)角色代碼
     */
    public class Invoker {
        private Command command;
        public Invoker(Command command) {
            this.command = command;
        }
        public void action() {
            command.execute();
        }
        
        private BeanFactoryService  beanFactory;
        
        public Result execute(Command command) {
            ApplicationObject ao = beanFactory.getBean(command.getName(), ApplicationObject.class, new XXProcessor(command));
            return ao.execute();  //這里就是接收者Receiver來執(zhí)行具體方法:
    xAO.methodA();
        }
    }

    /**
     * 抽象命令角色由Command接口扮演
     */
    public class Command {
        //...
        //沒有execute()方法
    }
    /**
     * 具體命令類
     */
    public class ConcreteCommand implements Command {
        //也沒有execute()方法
        //...
    }




    posted on 2008-01-24 16:45 EvanLiu 閱讀(5535) 評論(0)  編輯  收藏 所屬分類: 設(shè)計模式

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: av无码免费一区二区三区| 成年免费a级毛片免费看无码 | 国产精品亚洲色图| 色妞WWW精品免费视频| 亚洲中文字幕乱码一区| 成人无遮挡裸免费视频在线观看 | 亚洲欧美日韩中文字幕一区二区三区 | 99亚洲乱人伦aⅴ精品| 免费一级成人毛片| 亚欧国产一级在线免费| 久久国产亚洲精品麻豆| 日韩免费观看一区| 亚洲精品无码久久毛片波多野吉衣| 91高清免费国产自产| 亚洲人成网站999久久久综合| 国产成人免费a在线视频app| 免费国产黄网站在线看| 亚洲中文久久精品无码| 免费无遮挡无码永久视频| 亚洲免费观看网站| 国产成人免费全部网站 | 黄色网页免费观看| 在线播放亚洲第一字幕| 99爱在线精品视频免费观看9| 亚洲AV色吊丝无码| 日韩精品电影一区亚洲| 日韩a级无码免费视频| 亚洲综合色7777情网站777| 四虎影视永久免费视频观看| 两性色午夜免费视频| 亚洲字幕在线观看| 免费成人黄色大片| 免费A级毛片无码专区| 亚洲av中文无码乱人伦在线观看| 久久亚洲AV无码西西人体| 1000部禁片黄的免费看 | 日本免费人成网ww555在线| 色噜噜亚洲男人的天堂| 亚洲午夜无码AV毛片久久| 午夜影院免费观看| 黄页网址在线免费观看|