命令模式,筆者一直以為當我們開發的過程中基本上很難用到,直到維護階段或者重構階段,我們會發現有些撤銷命令和追加命令比較頻繁時,自然而然就用到命令模式。
先看下類圖
大話設計模式-類圖
簡單說下類圖,最開始筆者看大話設計模式的時候也不是很喜歡看類圖,主要原因是看不懂,后來當筆者第一次看完設計模式后,才真正意義上的理解類圖。
在現在的工作中筆者查看設計模式時,基本上都是直接看類圖,不會再去看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虛擬機的相關知識,當然也是以筆者切身感受去寫。
以上,希望能幫助學習命令模式的小伙伴。