作用
- 将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。
何时使用
- 在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。
优点
- 降低了系统耦合度。
- 新的命令可以很容易添加到系统中去。
实例
/**
* @Author: create_By: chenxin
* @Data:Created in 2018/9/10 18:43
* @Version:
* @Acton: 命令
*/
public interface Commend {
/* 这个方法是个返回结果为空的方法,实际项目中可以自行组织 */
void execute();
}
/**
* @Author: create_By: chenxin
* @Data:Created in 2018/9/10 18:49
* @Version:
* @Acton: 命令的调用者/发起者
*/
public class Invoke {
private Commend commend; //也可以通过List<Commend>容纳很多命令做批处理.
public Invoke(Commend commend) {
this.commend = commend;
}
public void cell(){
//命令执行前后都可以做处理
commend.execute();
}
}
/**
* @Author: create_By: chenxin
* @Data:Created in 2018/9/10 18:39
* @Version:
* @Acton: 真正的命令执行者
*/
public class Receiver {
public void action(){
System.out.println("Receiver.action()");
}
}
class ConcreateCommend implements Commend{
private Receiver receiver;
public ConcreateCommend(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void execute() {
//命令执行前后都可以做处理
receiver.action();
}
}
/**
* @Author: create_By: chenxin
* @Data:Created in 2018/9/10 18:51
* @Version:
* @Acton:
*/
public class TestCommendDemo {
public static void main(String[] args){
test();
}
private static void test() {
Commend commend = new ConcreateCommend(new Receiver());
Invoke invoke = new Invoke(commend);
invoke.cell();
}
}