麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

設(shè)計模式-命令模式

2019-11-10 20:02:42
字體:
供稿:網(wǎng)友

1.命令模式的定義及使用場景

定義:

命令模式是行為型設(shè)計模式之一。將一個請求封裝成一個對象,從而讓用戶使用不同的請求把客戶端參數(shù)化;對請求排隊或者記錄請求日志,以支持可撤銷的操作

使用場景:

需要抽象出待執(zhí)行的動作,然后以參數(shù)的形式提供出來,類似于過程設(shè)計中的回調(diào)機(jī)制,而命令模式正是回調(diào)機(jī)制的一個面向?qū)ο蟮奶娲贰T诓煌臅r刻指定、排列和執(zhí)行請求。一個命令對象可以有與初始請求無關(guān)的生存期。需要支持取消操作。支持修改日志功能,這樣當(dāng)系統(tǒng)奔潰時,這些修改可以被重做一遍。

需要支持事務(wù)操作。

2. 命令模式的優(yōu)缺點

2.1優(yōu)點

1)類間解耦調(diào)用者角色與接受者角色之間沒有任何依賴關(guān)系,調(diào)用者實現(xiàn)功能時只需要調(diào)用Command抽象類的execute方法就可以,不需要了解到底是那個接受者執(zhí)行2)可擴(kuò)展性Command的子類可以非常容易地擴(kuò)展,而調(diào)用者Invoker和高層次的模塊Client不產(chǎn)生嚴(yán)重的代碼耦合3)命令模式結(jié)合其他模式會更優(yōu)秀命令模式可以結(jié)合責(zé)任鏈模式,實現(xiàn)命令族解析任務(wù);結(jié)合模板方法模式,則可以減少Command子類的膨脹問題

2.2缺點

命令模式也是有缺點的,請看Command的子類;如果有N個命令,問題就出來了,Command的子類就可不是幾個,而是N個,這個類膨脹得非常大,這個就需要讀者在項目中慎重考慮

3.注意事項

對于命令模式,大家可能 心存疑慮,明明是一個很簡單的調(diào)用邏輯,為什么要做如此的復(fù)雜,為什么不直接reciver的excute方法就可以實現(xiàn)功能?調(diào)用邏輯復(fù)雜,是為了如果后續(xù)命令的增加, 能夠應(yīng)對后續(xù)需求的變化。簡單的只是開發(fā)起來方便,但對后續(xù)的維護(hù)則是困難。除此之外,使用命令模式的另一個好處是可以實現(xiàn)命令記錄的功能,可以在調(diào)用者里面使用一個數(shù)據(jù)結(jié)構(gòu)來存儲執(zhí)行過的命令對象,以此可以方便地知道剛剛執(zhí)行過哪些命令,并可以在需要是恢復(fù)。并且可以在調(diào)用者中執(zhí)行日志的記錄。

4. 命令模式的實現(xiàn)方式

public abstract class Command {    //執(zhí)行具體操作命令    public  abstract void execute();}
public class ConcreteCommand1 extends Command {    PRivate  Receiver receiver;    public ConcreteCommand1() {        this.receiver = new ConcreteReceiver1();    }    public void setReceiver(Receiver receiver) {        this.receiver = receiver;    }    @Override    public void execute() {        if(receiver!=null){            receiver.doSomething();        }    }}
public class ConcreteCommand2 extends Command {    private  Receiver receiver;    public ConcreteCommand2() {        this.receiver = new ConcreteReceiver2();    }    public void setReceiver(Receiver receiver) {        this.receiver = receiver;    }    @Override    public void execute() {        if(receiver!=null){            receiver.doSomething();        }    }}
public abstract  class Receiver {    public abstract void doSomething();}
public class ConcreteReceiver1 extends Receiver {    @Override    public void doSomething() {        System.out.println("ConcreteReceiver1 do...");    }}
public class ConcreteReceiver2 extends Receiver {    @Override    public void doSomething() {        System.out.println("ConcreteReceiver2 do...");    }}
public class Invoker {    private Command command;    public void setCommand(Command command) {        this.command = command;    }    public void action() {        this.command.execute();    }}
public class Test {    public static void main(String args[]) {        Invoker invoker = new Invoker();        Receiver receiver = new ConcreteReceiver1();        Command command = new ConcreteCommand1();        invoker.setCommand(command);        invoker.action();        Receiver receiver2 = new ConcreteReceiver2();        Command command2 = new ConcreteCommand2();        invoker.setCommand(command2);        invoker.action();    }}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 97中文字幕在线观看 | 九九热精品在线 | 欧美一区2区三区4区公司二百 | 在线观看一二三 | 亚洲影院在线 | 久久不射电影网 | 黄色片免费在线播放 | 久久99国产精品免费网站 | 色淫视频 | 老女人碰碰在线碰碰视频 | 国产亚洲精品久久777777 | 亚洲精中文字幕二区三区 | 久久久久女人精品毛片九一 | 久久久久久久免费看 | 色就色 综合偷拍区91网 | 一区二区三区黄色 | 999精品国产 | 黄色免费在线网站 | 欧美日韩一| 国产九九热 | 欧洲成人综合网 | 国产毛片在线高清视频 | 欧洲精品久久久 | 欧美一级淫片免费视频黄 | 免费高潮在线国 | 亚洲一级片在线观看 | 91网页 | 亚洲综合精品 | 久久亚洲国产午夜精品理论片 | 欧美一级黄色录相 | 成人毛片免费视频 | www.99av| 小雪奶水翁胀公吸小说最新章节 | 免费在线观看毛片 | 国产精品久久久久久久久久三级 | 午夜久久电影 | xxxx18韩国护士hd老师 | 天天色综合2 | 日韩视频在线免费 | 狠狠干导航 | 亚洲成人精品视频 |