设计模式-20.命令模式

mac2024-01-24  38

定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

使用场景:认为是命令的地方都可以使用命令模式

实现:定义命令接口,执行者类,命令聚合执行者,定义请求发起者,聚合命令列表

优点:执行者与请求者解耦

代码示例:饭店点菜,有厨师(执行者)、客人(请求者)、服务员(通知者)

/**  * 命令接口-菜单  * @author liuhao  *  */ public interface Order {     void execute(); }

/**  * 命令实现类 菜A  * @author liuhao  *  */ public class DishA implements Order{

    private Chef chef;          public DishA(Chef chef) {         super();         this.chef = chef;     }

    @Override     public void execute() {         chef.cookingA();     }

}

/**  * 命令实现类 菜B  * @author liuhao  *  */ public class DishB implements Order {          private Chef chef;          public DishB(Chef chef) {         super();         this.chef = chef;     }     @Override     public void execute() {         chef.cookingB();     }

}

/**  * 命令执行者-厨师  * @author liuhao  *  */ public class Chef {     public void cookingA() {         System.out.println("做菜A");     }     public void cookingB() {         System.out.println("做菜B");     }      }

/**  * 命令发起者-顾客  * @author liuhao  *  */ public class Customer {     private List<Order> orders = new ArrayList<Order>();          public void addOrder(Order order) {         orders.add(order);     }          public void execAll() {         for (Order order : orders) {             order.execute();         }     } }

public class Main {

    public static void main(String[] args) {         Chef chef = new Chef();         DishA a = new DishA(chef);         DishB b = new DishB(chef);                  Customer customer = new Customer();         customer.addOrder(a);         customer.addOrder(b);         customer.execAll();     }

}

结果:

最新回复(0)