设计模式之命令模式的学习思考
来源:互联网 发布:守望先锋性能数据 ping 编辑:程序博客网 时间:2024/05/17 00:12
命令模式与责任链模式有点像,但是还是不同。
- 命令模式:将多个命令只提交给一个执行该命令的对象 而职责链模式相反:只将一个请求提交给多个能执行该命令的对象
命令模式也属于行为型模式。
何时使用,比如要对行为进行”记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将”行为请求者”与”行为实现者”解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。
代码:
import java.util.ArrayList;import java.util.List;interface Order{ //命令接口 void execute();}class Eat{ //请求类 private int price=10; public void Lunch(){ System.out.println("Price:"+price+"--lunch"); } public void Dinner(){ System.out.println("Price: "+price+"--dinner"); }}class EatLunch implements Order{ private Eat eat; public EatLunch(Eat eat){ this.eat=eat; } public void execute() { eat.Lunch(); }}class EatDinner implements Order{ private Eat eat; public EatDinner(Eat eat){ this.eat=eat; } @Override public void execute() { eat.Dinner(); }}class Broker{ //命令调用类 private List<Order> orderList=new ArrayList<Order>(); public void takeOrder(Order order){ orderList.add(order); } public void placeOrder(){ for(Order order:orderList){ order.execute(); } orderList.clear(); }}public class CommandPatternDemo { public static void main(String[] args) { Eat eat=new Eat(); EatLunch eatLunch=new EatLunch(eat); EatDinner eatDinner=new EatDinner(eat); Broker broker=new Broker(); broker.takeOrder(eatLunch); broker.takeOrder(eatDinner); broker.placeOrder(); }}
输出:
Price:10--lunchPrice: 10--dinner
这种模式的缺点就是可能会增加很多具体命令类(Pass:最近头很晕,可能没睡好。。。)
阅读全文
0 0
- 设计模式之命令模式的学习思考
- 设计模式之单例模式的学习思考
- 设计模式之创建者模式的学习思考
- 设计模式之原型模式的学习思考
- 设计模式之适配器模式的学习思考
- 设计模式之桥接模式的学习思考
- 设计模式之过滤器模式的学习思考
- 设计模式之组合模式的学习思考
- 设计模式之装饰器模式的学习思考
- 设计模式之外观模式的学习思考
- 设计模式之享元模式的学习思考
- 设计模式之代理模式的学习思考
- 设计模式之解释器模式的学习思考
- 设计模式之迭代器模式的学习思考
- 设计模式之中介者模式的学习思考
- 设计模式之备忘录模式的学习思考
- 设计模式学习的思考
- 设计模式之责任链的学习思考
- sqoop 从mysql导入数据到HDFS(R语言&大数据分析qq群 456726635 欢迎讨论交流)
- Java中I/O操作总结
- 研究人员发现惠普音频驱动中存在键盘记录器
- python操作mysql
- HTML常用标签
- 设计模式之命令模式的学习思考
- 【剑指Offer】面试题10:二进制中1的个数
- 一个PDF合并操作实现类,利用iTextSharp控件实现
- 获取List集合泛型参数
- Android App优化之性能分析工具
- python异常处理
- 因为爬虫,我的老板进监狱了——真是搞扯!
- 通过adb命令从手机中复制文件到PC端
- 下拉框