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

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

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

    城市獵人

    在一網(wǎng)情深的日子里,誰能說得清是苦是甜,只知道確定了就義無反顧
    posts - 1, comments - 7, trackbacks - 0, articles - 89

    模式(六):命令(Command)模式

    Posted on 2008-07-24 17:20 sailor 閱讀(213) 評(píng)論(0)  編輯  收藏 所屬分類: 模式

    定義
        將“請(qǐng)求”封裝成對(duì)象,以便使用不同的請(qǐng)求、隊(duì)列或者日志來參數(shù)化其他對(duì)象。命令模式也支持可撤銷的操作。

    要點(diǎn)
        命令模式將發(fā)出請(qǐng)求的對(duì)象和接受請(qǐng)求的對(duì)象解耦;

        在被解耦的兩者之間是通過命令對(duì)象進(jìn)行溝通的。命令對(duì)象封裝了接收者和一個(gè)或者一組對(duì)象;

        調(diào)用者通過調(diào)用命令對(duì)象的execute()發(fā)出請(qǐng)求,這會(huì)使得接受者的動(dòng)作被調(diào)用;

        調(diào)用者可以接受命令當(dāng)作參數(shù),甚至在運(yùn)行時(shí)動(dòng)態(tài)地進(jìn)行;

        命令也可以實(shí)現(xiàn)日志和實(shí)務(wù)系統(tǒng)。


    所涉及的角色:
    1.客戶(Client)角色:
    創(chuàng)建一個(gè)具體對(duì)象及其確定接收者.
    2.命令(Command)角色:聲明了一個(gè)給所有具體命令類的抽象接口。
    3.具體命令(ConcreteCommand)角色:定義一個(gè)接收者與行為之間的弱耦合,實(shí)現(xiàn)exceute()方法,負(fù)責(zé)調(diào)用接收者的相應(yīng)操作
    4.請(qǐng)求者(Invoker)角色:
    負(fù)責(zé)調(diào)用命令對(duì)象執(zhí)行請(qǐng)求。
    5.接收者(Recevice)角色:負(fù)責(zé)具體實(shí)施與執(zhí)行一個(gè)請(qǐng)求。
    commmand.bmp
    優(yōu)點(diǎn):
    解耦了發(fā)送者和接受者之間聯(lián)系。 發(fā)送者調(diào)用一個(gè)操作,接受者接受請(qǐng)求執(zhí)行相應(yīng)的動(dòng)作,因?yàn)槭褂肅ommand模式解耦,發(fā)送者無需知道接受者任何接口。

    命令模式創(chuàng)建的一般步驟
    1.客戶端創(chuàng)建一個(gè)ConcreteCommand對(duì)象,并指明接收者。
    2.請(qǐng)求對(duì)象保持ConcreteCommand對(duì)象。
    3.請(qǐng)求對(duì)象通過調(diào)用action方法發(fā)出請(qǐng)求,若命令是可撤消,則ConcreteCommand保存execute()方法執(zhí)行前的狀態(tài)。
    4.ConcreteCommand對(duì)象調(diào)用接收的方法執(zhí)行請(qǐng)求。

    實(shí)例
    抽象命令接口:

    package command;
    public interface Command{
        
    //執(zhí)行方法
         void execute();
    }

    具體命令

    package command;
    public class ConcreteCommand implements Command{
        
    //接收者
        private Receiver receiver;
        
    //構(gòu)造方法
        public ConcreteCommand(Receiver receiver){
            
    this.receiver=receiver;
        }

        
    //執(zhí)行方法
        public void execute(){
            receiver.action();
        }

    }

    接收者:

    package command;
    public  class Receiver {
        
    //構(gòu)造方法
        public Receiver(){};
        
    //行為方法
        public void action(){
            System.out.println(
    "Action is taken here");
        }

    }

    請(qǐng)求者:

    package command;
    public class Invoker{
        
    //命令
        private Command command;
        
    //構(gòu)造方法
        public Invoker(Command command){
            
    this.command=command;
        }

        
    //行為方法
        public void action(){
            command.execute();
        }

    }

    客戶端:

    package command;
    public class Client{
        
    public static void main(String[] args){
            Receiver receiver
    =new Receiver();
            Command concreteCommand
    =new ConcreteCommand(receiver);
            Invoker invoker
    =new Invoker(concreteCommand);
            invoker.action();
        }

    }

    命令模式與責(zé)任鏈模式區(qū)別:
    責(zé)任鏈模式使一個(gè)特定的請(qǐng)求接收對(duì)象對(duì)請(qǐng)求與命令的執(zhí)行變得不確定性.而命令模式使得一個(gè)特定的對(duì)象對(duì)命令的執(zhí)行變得明顯與確定.

    參考資料:《First Head 設(shè)計(jì)模式》
                            設(shè)計(jì)模式學(xué)習(xí)筆記(十五)--------命令(Command)模式

    主站蜘蛛池模板: 毛片网站免费在线观看| 亚洲国产精品成人综合色在线| 国产精品深夜福利免费观看| 亚洲午夜免费视频| 一个人看的免费视频www在线高清动漫| 亚洲精品动漫在线| 亚洲bt加勒比一区二区| 精品亚洲成α人无码成α在线观看 | 亚洲视频在线一区二区三区| 亚洲国产一成久久精品国产成人综合 | 插鸡网站在线播放免费观看| 国产精品亚洲av色欲三区| 亚洲人成电影网站| 久久精品国产亚洲av高清漫画| 国产偷窥女洗浴在线观看亚洲| 免费看小12萝裸体视频国产| 处破痛哭A√18成年片免费| 国产大片免费网站不卡美女| 久久久久高潮毛片免费全部播放 | 亚洲五月午夜免费在线视频| 国产伦一区二区三区免费| 全免费a级毛片免费**视频| 无码日韩人妻av一区免费| 99在线精品视频观看免费| 久久国产免费福利永久| 亚洲网站免费观看| 亚洲黄色片免费看| 亚洲精品免费在线视频| 一级毛片免费观看不卡视频| 无码中文字幕av免费放dvd| 亚洲电影免费在线观看| 一区二区三区四区免费视频 | 亚洲毛片网址在线观看中文字幕 | 午夜亚洲国产精品福利| 国产成人综合亚洲绿色| 国产亚洲女在线线精品| 免费国产草莓视频在线观看黄| 羞羞视频网站免费入口| 思思久久99热免费精品6| XXX2高清在线观看免费视频| 最新久久免费视频|