设计模式(十四):命令模式

115 阅读1分钟

介绍

命令模式(Command Pattern)属于行为型模式。将请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。是一种数据驱动的设计模式。

优点

  • 降低了系统耦合度。
  • 新的命令可以很容易添加到系统中去。

缺点

  • 使用命令模式可能会导致某些系统有过多的具体命令类

应用

Android中的事件传递机制(handler),实现了命令Message和接收者handler解耦

实现

关键代码:将一个请求封装成一个对象,从而可以用不同的命令来请求该对象

interface Order {
    void execute();
}

// 接收者,真正的命令执行对象
class Receiver {
    public void eat(){
       System.out.println("Start to eat");
    }
    public void drink(){
       System.out.println("Start to drink");
    }
}

class eatOrder implements Order {
    private Receiver receiver;

    public eatOrder(){
        this.receiver = new Receiver();
    }

    public void execute() {
       receiver.eat();
    }
}

class drinkOrder implements Order {
    private Receiver receiver;

    public drinkOrder(Receiver receiver){
        this.receiver = receiver;
    }

    public void execute() {
       receiver.drink();
    }
}

// 关键在于增加了这个Body类,将请求封装成一个对象
class Body {
    private Order order;

    public Body(Order order){
        this.order = order; 
    }

    public void placeOrders(){
        order.execute();
    }
}

class CommandPatternDemo {
    public static void main(String[] args) {

       Reciever reciever = new Reciever();  //  创建命令接收者
       Order order = new eatOrder(reciever);  //  创建命令,并指定接收者
       Body body = new Body(order);  //  创建命令执行者执行命令
       body.placeOrders();

       //  无非就是请求方发出请求,接收方接收请求,并执行操作,对象和命令解耦

    }
 }
Start to eat