您的位置:首页 > 其它

设计模式--[6]命令模式

2017-01-04 15:57 337 查看

命令模式

定义

命令模式:将请求封装成对象,以便使用不同的请求、日志、队列等来参数化其他对象。命令模式也支持撤销操作。

举个例子

就像领导命令员工工作,,,领导让他开车,去搬砖.然后回复领导完成的结果.

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的设计模式中,就用的这个道理.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息