Java设计模式——命令模式(Command Pattern)
2017-09-29 17:33
806 查看
命令模式定义
将一个请求封装为一个对象(即我们创建的Command对象),从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作。命令模式涉及的角色
1.抽象命令(Command):定义命令的接口,声明执行的方法。2 具体命令(ConcreteCommand):具体命令,实现要执行的方法,它通常是“虚”的实现;通常会有接收者,并调用接收者的功能来完成命令要执行的操作。
3 接收者(Receiver):真正执行命令的对象。任何类都可能成为一个接收者,只要能实现命令要求实现的相应功能。
4 调用者(Invoker):要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象。这个是客户端真正触发命令并要求命令执行相应操作的地方,也就是说相当于使用命令对象的入口。
5 客户端(Client):命令由客户端来创建,并设置命令的接收者。
命令模式类图
代码实现
首先创建作为命令的接口 Order,然后创建作为请求的 Stock 类。实体命令类 BuyStock 和 SellStock,实现了 Order 接口,将执行实际的命令处理。创建作为调用对象的类 Broker,它接受订单并能下订单。Broker 对象使用命令模式,基于命令的类型确定哪个对象执行哪个命令。CommandPatternDemo,我们的演示类使用 Broker 类来演示命令模式。
UML类图
第一步:创建一个命令接口
Order.javapublic interface Order { void execute(); }
第二步:创建一个请求类
Stock.javapublic class Stock { private String name = "ABC"; private int quantity = 10; public void buy(){ System.out.println("Stock [ Name: "+name+", Quantity: " + quantity +" ] bought"); } public void sell(){ System.out.println("Stock [ Name: "+name+", Quantity: " + quantity +" ] sold"); } }
第三步:创建实现了 Order 接口的实体类
BuyStock.javapublic class BuyStock implements Order { private Stock abcStock; public BuyStock(Stock abcStock){ this.abcStock = abcStock; } public void execute() { abcStock.buy(); } }
SellStock.java
public class SellStock implements Order { private Stock abcStock; public SellStock(Stock abcStock){ this.abcStock = abcStock; } public void execute() { abcStock.sell(); } }
第四步:创建命令调用类
Broker.javaimport java.util.ArrayList; import java.util.List; public class Broker { private List<Order> orderList = new ArrayList<Order>(); public void takeOrder(Order order){ orderList.add(order); } public void placeOrders(){ for (Order order : orderList) { order.execute(); } orderList.clear(); } }
第五步:使用 Broker 类来接受并执行命令
CommandPatternDemo.javapublic class CommandPatternDemo { public static void main(String[] args) { Stock abcStock = new Stock(); BuyStock buyStockOrder = new BuyStock(abcStock); SellStock sellStockOrder = new SellStock(abcStock); Broker broker = new Broker(); broker.takeOrder(buyStockOrder); broker.takeOrder(sellStockOrder); broker.placeOrders(); } }
第六步:验证输出
Stock [ Name: ABC, Quantity: 10 ] bought Stock [ Name: ABC, Quantity: 10 ] sold
命令模
4000
式的优缺点
优点
1、降低了系统耦合度。2、新的命令可以很容易添加到系统中去。
缺点
使用命令模式可能会导致某些系统有过多的具体命令类。相关文章推荐
- 设计模式学习笔记--命令模式command pattern(Java版)
- Java设计模式 Design Pattern:命令模式 Command Pattern
- JAVA设计模式之 命令模式【Command Pattern】
- 【Java设计模式】· 命令模式(Command Pattern)
- Java设计模式 Design Pattern:命令模式 Command Pattern
- java设计模式——命令模式(Command Pattern)
- JAVA设计模式之 命令模式【Command Pattern】
- Java设计模式:命令模式(Command Pattern)
- Java与模式 命令模式 Command Pattern
- 极速理解设计模式系列:17.命令模式(Command Pattern)
- 设计模式15:Command Pattern (命令模式)
- 解读设计模式----命令模式(Command Pattern)
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
- .NET设计模式(17):命令模式(Command Pattern)
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
- 深入浅出设计模式-006:命令模式(Command Pattern)
- 设计模式 - Command Pattern(命令模式)
- 设计模式笔记之命令模式(command Pattern)
- 设计模式读书笔记之命令模式(Command Pattern)
- Java设计模式-之Command命令模式