命令模式,笔者一直以为当我们开发的过程中基本上很难用到,直到维护阶段或者重构阶段,我们会发现有些撤销命令和追加命令比较频繁时,自然而然就用到命令模式。
先看下类图
大话设计模式-类图
简单说下类图,最开始笔者看大话设计模式的时候也不是很喜欢看类图,主要原因是看不懂,后来当笔者第一次看完设计模式后,才真正意义上的理解类图。
在现在的工作中笔者查看设计模式时,基本上都是直接看类图,不会再去看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虚拟机的相关知识,当然也是以笔者切身感受去写。
以上,希望能帮助学习命令模式的小伙伴。