中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【設計模式與Android】命令模式——軍令如山

發布時間:2020-07-10 16:11:58 來源:網絡 閱讀:690 作者:東風玖哥 欄目:移動開發

什么是命令模式

 

所謂命令模式,就是將一個請求封裝為一個對象,從而讓用戶使用不同的請求把客戶端參數化;對請求排隊或者記錄請求日志,以及支持可撤銷的操作的設計模式。

 

命令模式的實現方式

 

劉備三顧茅廬請諸葛亮出山之后,曹操派夏侯惇攻打劉備。劉備讓諸葛亮指揮各位將軍,諸葛亮“恐關、張二人不肯聽吾號令”,劉備“便以劍印付孔明,孔明遂聚集眾將聽令。”

諸葛亮成了命令的發布者:

public class ZhugeLiang {
    Command command;

    public void setCommand(Command command){
        this.command = command;
    }

    public void publishCommand(){
        command.execute();
    }

}

 

各位將軍們成為了命令的接收者和執行者

public class General {

    private String name = "";

    public General(String name) {
        this.name = name;
    }

    public void execute(Command command){
        Log.e("諸葛亮命令"+name,command.getAction());
    }

}

 

在豫山埋伏的命令

public class YushanCommand extends Command {
    public YushanCommand(General general) {
        super(general);
    }

    @Override
    public String getAction() {
        return "引一千軍往豫山埋伏……縱兵出擊,就焚其糧草。";
    }
}

 

在安林埋伏的命令

public class AnlinCommand extends Command {
    public AnlinCommand(General general) {
        super(general);
    }

    @Override
    public String getAction() {
        return "引一千軍去安林背后山谷中埋伏,……向博望城舊屯糧草處縱火燒之。";
    }
}

 

 

勾引夏侯惇等人進埋伏圈的命令

public class SeduceCommand extends Command {
    public SeduceCommand(General general) {
        super(general);
    }

    @Override
    public String getAction() {
        return "為前部,不要贏,只要輸。";
    }
}

 

 

讓具體的將軍們執行命令

ZhugeLiang zhugeLiang = new ZhugeLiang();
zhugeLiang.setCommand(new YushanCommand(new General("關羽")));
zhugeLiang.publishCommand();
zhugeLiang.setCommand(new AnlinCommand(new General("張飛")));
zhugeLiang.publishCommand();
zhugeLiang.setCommand(new SeduceCommand(new General("趙云")));
zhugeLiang.publishCommand();

 

諸葛亮初出茅廬便大獲全勝,讀者們也學會了命令模式。

 

Android源碼中的命令模式

 

1)命令模式不但讓發布者與接收者解耦,也使得整個過程變得可控。Handler、Message、AsyncTask的執行流程都是命令模式的體現。

 

Android開發中如何利用命令模式

 

命令模式有更弱的耦合性、更靈活的控制性以及更好的擴展性。因此適用于以下場景:

1)在不同的時刻制定、排列和執行請求時。

 

2)當系統可能崩潰而需要按照修改日志重做時。

 

3)當需要支持取消操作或者事務操作的時候。

 

需要注意的幾個問題

 

命令模式讓開發者之間的協作和工作交接變得簡便,但調用邏輯卻變得異常復雜。同時帶來了大量衍生類,讓代碼過度膨脹。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巴中市| 甘谷县| 彰武县| 新绛县| 华安县| 海盐县| 平湖市| 乡宁县| 博乐市| 柳江县| 朝阳县| 洛扎县| 徐州市| 庆城县| 甘南县| 宝鸡市| 泽州县| 吉水县| 曲松县| 贵德县| 灵石县| 桓台县| 禹城市| 上思县| 马山县| 延川县| 内江市| 丁青县| 得荣县| 庄浪县| 大新县| 莒南县| 额济纳旗| 曲沃县| 都兰县| 康马县| 沈丘县| 鄂托克旗| 扎鲁特旗| 南投县| 长顺县|