行为型 包含了 观察者模式、模板模式、策略模式、职责链模式、状态模式、迭代器模式、 访问者模式、备忘录模式、命令模式、解释器模式、中介模式 总共11种模式。
在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。将一组行为抽象为对象,可以实现二者之间的松耦合。通过调用者调用接受者执行命令,顺序:调用者→命令→接受者。
该模式降低了系统耦合度,新的命令可以很容易添加到系统中去。
public class OrderService {
private String name;
private double amount;
public OrderService(String name, double amount) {
this.name = name;
this.amount = amount;
}
public void sell(){
System.out.println("sell product :"+name+" ,amount="+amount);
}
public void buy(){
System.out.println("buy product :"+name+" ,amount="+amount);
}
}
public interface Command {
void execute();
}
public class BuyCommand implements Command{
private OrderService service;
public BuyCommand(OrderService service) {
this.service = service;
}
@Override
public void execute() {
service.buy();
}
}
public class SellCommand implements Command{
private OrderService service;
public SellCommand(OrderService service) {
this.service = service;
}
@Override
public void execute() {
service.sell();
}
}
public class Broker {
private LinkedList<Command> commands = new LinkedList<>();
public void add(Command command) {
commands.add(command);
}
public void runCommands(){
while (!commands.isEmpty()) {
Command c = commands.poll();
c.execute();
}
}
}
public class Main {
public static void main(String[] args) {
Command c1 = new BuyCommand(new OrderService("trousers",20));
Command c2 = new BuyCommand(new OrderService("desses",10));
Broker broker = new Broker();
broker.add(c1);
broker.add(c2);
broker.runCommands();
}
}
运行结果:
buy product :trousers ,amount=20.0
buy product :desses ,amount=10.0
命令模式的主要作用和应用场景,是用来控制命令的执行,比如,异步、延迟、排队执行命令、撤销重做命令、存储命令、给命令记录日志等等。
设计模式系列在github上有一个开源项目,主要是本系列博客的demo代码。https://github.com/forestnlp/designpattern
如果您对软件开发、机器学习、深度学习有兴趣请关注本博客,将持续推出Java、软件架构、深度学习相关专栏。
您的支持是对我最大的鼓励。