命令模式

Intent

  • Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.
  • Promote "invocation of a method on an object" to full object status
  • An object-oriented callback

Structure

命令模式_第1张图片
Structure

实例Demo

  1. 类图


    命令模式_第2张图片
    Command by keith
  2. 代码:
public class Command {
    public static void main(String[] args){
        Customer customer=new Customer();
        Waiter waiter=new Waiter();
        customer.takeOrder(waiter,new Lunch("Steak"));
        customer.takeOrder(waiter,new Lunch("Salad"));

        waiter.orderUp();
    }
}
class Customer {
    public void takeOrder(Waiter waiter, Order order) {
        waiter.addOrder(order);
    }
}
class Waiter {
    List orders;

    public Waiter() {
        orders = new ArrayList<>();
    }

    public void addOrder(Order order) {
        orders.add(order);
    }
    public void orderUp() {
        for (Order order : orders) {
            order.prepare();
            order.cooking();
            order.finishing();
        }
        orders.clear();
    }
}
interface Order {
    void prepare();

    void cooking();

    void finishing();
}
class Lunch implements Order {

    private String name;

    public Lunch(String name) {
        this.name = name;
    }

    @Override
    public void prepare() {
        System.out.println(name + " is preparing");
    }

    @Override
    public void cooking() {
        System.out.println(name + " is cooking");
    }

    @Override
    public void finishing() {
        System.out.println(name + " is finishing");
    }
}
  1. Output
Steak is preparing
Steak is cooking
Steak is finishing
Salad is preparing
Salad is cooking
Salad is finishing

Refenrence

  1. Design Patterns
  2. 设计模式

你可能感兴趣的:(命令模式)