<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麻豆| 永久免费av无码入口国语片| 朝桐光亚洲专区在线中文字幕| AV大片在线无码永久免费| 亚洲免费网站在线观看| 毛片免费观看的视频| 亚洲午夜成人精品无码色欲| 在线免费视频一区| 亚洲av纯肉无码精品动漫| 国产美女无遮挡免费视频| 色噜噜狠狠色综合免费视频| 亚洲中久无码不卡永久在线观看| 九九免费精品视频在这里| 精品国产亚洲一区二区三区| 午夜亚洲WWW湿好爽| 免费观看四虎精品国产永久| 一级特黄a大片免费| 亚洲av无码一区二区三区乱子伦| 国产精品免费AV片在线观看| 亚洲国产成人手机在线电影bd | 免费国产小视频在线观看| 美女视频黄视大全视频免费的| 国产偷国产偷亚洲高清日韩| 免费无码又爽又刺激高潮视频 | 亚洲AV无码乱码在线观看代蜜桃| 免费看国产成年无码AV片| 色www免费视频| 亚洲成AV人在线播放无码| 97在线观看永久免费视频| 亚洲AV无码男人的天堂| 日本亚洲国产一区二区三区| 1000部啪啪毛片免费看| 亚洲精品无码av片| 亚洲精品tv久久久久久久久| 69av免费视频| 无码毛片一区二区三区视频免费播放 | 在线观看亚洲网站| 亚洲av无码不卡| 免费无码黄网站在线观看| 久久免费99精品国产自在现线 |