java 之 命令模式(大話設計模式)


命令模式,筆者一直以為當我們開發的過程中基本上很難用到,直到維護階段或者重構階段,我們會發現有些撤銷命令和追加命令比較頻繁時,自然而然就用到命令模式。

先看下類圖

大話設計模式-類圖

簡單說下類圖,最開始筆者看大話設計模式的時候也不是很喜歡看類圖,主要原因是看不懂,后來當筆者第一次看完設計模式后,才真正意義上的理解類圖。

在現在的工作中筆者查看設計模式時,基本上都是直接看類圖,不會再去看demo。所以在這里筆者鼓勵大家多看類圖,並明白類圖的意義,也不用過於刻意去看,

當大家明白一個設計模式后,再去重新看下類圖,相信大家會有收獲的。好了,先看下筆者的demo。

/**
 * 燒烤師傅
 */
public class Barbecue {

    public void makeMutton() {
        System.out.println("烤羊肉串");
    }

    public void makeChicken() {
        System.out.println("考雞肉串");
    }
}
/**
 * 命令抽象父類
 */
public abstract class Commond {

    private Barbecue barbecue;

    public Commond(Barbecue barbecue) {
        super();
        this.barbecue = barbecue;
    }

    public abstract void excuteCommond();

    public Barbecue getBarbecue() {
        return barbecue;
    }

    public void setBarbecue(Barbecue barbecue) {
        this.barbecue = barbecue;
    }
}
/**
 * 烤雞翅命令
 */
public class ChickenCommond extends Commond{

    public ChickenCommond(Barbecue barbecue) {
        super(barbecue);
    }
    @Override
    public void excuteCommond() {
        super.getBarbecue().makeChicken();
    }

}
/**
 * 烤羊腿命令
 */
public class MuttonCommod extends Commond{

    public MuttonCommod(Barbecue barbecue) {
        super(barbecue);
    }
    @Override
    public void excuteCommond() {
        super.getBarbecue().makeMutton();
    }

}
/**
 * 服務員
 */
public class Waiter {

    private List<Commond> commonds = new ArrayList<>();

    public void addCommond(Commond commond) {
        // TODO 可以做很多事情  記日志等等
        commonds.add(commond);
    }

    public void removeCommond(Commond commond) {
        // TODO 可以做很多事情  記日志等等
        commonds.remove(commond);
    }

    public void Notify() {
        for (Commond commond : commonds) {
            commond.excuteCommond();
        }
    }
}
/**
 * 客戶端
 */
public class Test {

    public static void main(String[] args) {
        Barbecue barbecue = new Barbecue();
        Commond commond = new ChickenCommond(barbecue);
        Waiter waiter = new Waiter();
        waiter.addCommond(commond);
        waiter.Notify();
    }
}

 

運行結果如下

考雞肉串

 

大話設計模式一共24個設計模式,筆者堅持每天更新一篇,有時工作忙沒能及時更新。大話設計模式更新完畢,筆者會更新JVM虛擬機的相關知識,當然也是以筆者切身感受去寫。

以上,希望能幫助學習命令模式的小伙伴。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM