命令模式
2017-01-04 本文已影响54人
Chauncey_Chen
命令模式
定义
命令模式:将请求封装成对象,以便使用不同的请求、日志、队列等来参数化其他对象。命令模式也支持撤销操作。
举个例子
就像领导命令员工工作,,,领导让他开车,去搬砖.然后回复领导完成的结果.
android登录的时候,登录,注册两个功能.
用户的操作就是命令,他不管你如何实现,
解耦隔离
所谓解耦隔离,,其实就是让两者互不相干.即登录的命令和结果,和如何登录进行分类. 登录只关心结果,而如果登录更注重如何实现.就比如,有一天我想讲登录的方式换个姿势~ 以前用volley现在用Retrofit.而丝毫不会对以前的架构产生影响.
关键词
1、Command 接口命令
2、Invoker 使用命令对象的入口,持有命令Command
3、ConcreteCommand 命令接口实现,持有Received
4、Received 真正的命令执行对象
代码实例:
1、Command 接口命令
public interface Command {
void excute();
void back();
}
2、Invoker 使用命令对象的入口,持有命令Command
/**
* 使用命令对象的入口,持有命令Command
* @author ccj
*
*/
public class General {
private Command command;
public General(Command command) {
this.setCommand(command);
}
public void Attach(){
command.excute();
}
public void back(){
command.back();
}
}
3、ConcreteCommand 命令接口实现,持有Received
/**
* 命令接口实现,持有Received army
* @author ccj
*
*/
public class AttachCommand implements Command{
private Army army;
public AttachCommand(Army army) {
this.army = army;
}
@Override
public void excute() {
army.attack();
}
@Override
public void back() {
army.back();
}
}
4、Received 真正的命令执行对象
/**
* Received 真正的命令执行对象
* @author ccj
*
*/
public class Army {
public Army( ) {
}
public void attack() {
System.out.println("Army 攻击城市");
}
public void back() {
System.out.println("Army 撤退");
}
}
具体使用者
public class Test {
public static void main(String[] args) {
Army army=new Army();
Command command=new AttachCommand(army);
General general=new General(command);
general.Attach();
}
}
测试结果
Army 攻击城市
总结
命令模式,就会用一个接口,轻松的解耦实现!
面向接口编程,其中一个思想就是用接口抽象出行为,将"行为请求者"与"行为实现者"进行解耦.命令模式,在MVP的设计模式中,就用的这个道理.