设计模式之命令模式
Command(命令模式)
一、命令模式简介
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
核心:
- 1、将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化
- 2、通过调用者调用接受者执行命令,顺序:调用者→接受者→命令
- 3、定义三个角色:1、received 真正的命令执行对象 2、Command 命令 3、invoker 使用命令对象的入口
二、命令模式优缺点比较
优点:
- 1、降低了系统耦合度
- 2、新的命令可以很容易添加到系统中去
缺点:
- 1、使用命令模式可能会导致某些系统有过多的具体命令类
使用场景:
- 1、数据库事务底层机制
- 2、命令的撤销和恢复
注意事项:1、系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作,也可以考虑使用命令模式,见命令模式的扩展。
三、UML类图

四、设计实现
步骤1:创建接受者Receiver
//接受者执行请求的操作 public class Receiver { private String name ; private int quantity; public Receiver(String name, int quantity) { this.name = name; this.quantity = quantity; } public void buy(){ System.out.println("request [ Name: "+name+", Quantity: " + quantity +" ] bought"); } public void sell(){ System.out.println("request [ Name: "+name+", Quantity: " + quantity +" ] sold"); } }
步骤2:创建命令接口
//Command 命令接口 public interface Command { void excute(); }
步骤3:创建实现命令接口的具体实现类
//ConcreteCommand具体实现类 public class BuyCommand implements Command { private Receiver r; public BuyCommand(Receiver r) { this.r = r; } @Override public void excute() { r.buy(); } } public class SoldCommand implements Command{ private Receiver r; public SoldCommand(Receiver r) { this.r = r; } @Override public void excute() { r.sell(); } }
步骤4:创建请求类Invoker
public class Invoker { private List<Command> comLists = new ArrayList<>(); public void addCom(Command c) { comLists.add(c); } public void excuteCom(){ for (Command c : comLists) { c.excute(); } comLists.clear(); } }
步骤5:调用者测试
public class CommandDemo { public static void main(String[] args) { Receiver r = new Receiver("ABC", 10); Command c1 = new BuyCommand(r); Command c2 = new SoldCommand(r); Invoker request = new Invoker(); request.addCom(c1); request.addCom(c2); request.excuteCom(); } }
步骤6:运行程序,观察结果

posted on 2020-04-08 21:22 VincentYew 阅读(283) 评论(0) 收藏 举报
浙公网安备 33010602011771号