
The command pattern is a behavioral design pattern in which an object is used to encapsulate all information needed to perform an action or trigger an event at a later time. This information includes the method name, the object that owns the method and values for the method parameters. (命令模式是一种行为设计模式,其中一个对象用于封装所有信息,以便在以后执行某个操作或触发某个事件。此信息包括方法名称、拥有方法的对象和方法参数的值) —— quote from Wikipedia

 简而言之,命令模式就是将封装了相关方法的类进行收集并调用,最终实现相应的结果。
1、降低了系统耦合度。
2、新的命令可以很容易添加到系统中去。
使用命令模式可能会导致某些系统有过多的具体命令类。
 举个常见的例子,小明去上海旅游,有出发和返程的方法。然后代理类放入相关的类,将其正确的执行。
相关代码:
// 旅游接口
interface Place {
    void travel();
}
class Person {
    private String name = "xiaoming";
    private int age = 18;
    // 出发
    public void setOff() {
        System.out.println("name:[" + name + "] " + "age:[" + age + "] " + "set off");
    }
    // 返程
    public void getBack() {
        System.out.println("name:[" + name + "] " + "age:[" + age + "] " + "get back");
    }
}
// 上海旅游
class GoToShangHai implements Place {
    private Person person;
    public GoToShangHai(Person person) {
        this.person = person;
    }
    @Override
    public void travel() {
        person.setOff();
        System.out.println("tarvel around ShangHai");
    }
}
// 从上海返程
class BackFromShangHai implements Place {
    private Person person;
    public BackFromShangHai(Person person) {
        this.person = person;
    }
    @Override
    public void travel() {
        person.getBack();
        System.out.println("get back from ShangHai");
    }
}
class  Proxy{
    private List<Place> placeList = new ArrayList<>();
    public void travelPlace(Place place) {
        placeList.add(place);
    }
    public void places() {
        for (Place place : placeList) {
            place.travel();
        }
        placeList.clear();
    }
}
public class CommondDemo {
    public static void main(String[] args) {
        Person person = new Person();
        GoToShangHai goToShangHai = new GoToShangHai(person);
        BackFromShangHai backFromShangHai = new BackFromShangHai(person);
        Proxy proxy = new Proxy();
        proxy.travelPlace(goToShangHai);
        proxy.travelPlace(backFromShangHai);
        proxy.places();
    }
}name:[xiaoming] age:[18] set off
tarvel around ShangHai
name:[xiaoming] age:[18] get back
get back from ShangHai