23种设计模式之命令模式
2019-01-23 本文已影响0人
阿跳爱学习
几乎用不上,了解一下,做个笔记。
优点:降低了系统耦合度。
缺点:使用命令模式可能会导致某些系统有过多的具体命令类。
例子:模拟红军打仗接受命令模式。
创建命令的执行者:
import android.util.Log;
/**
* 命令的执行者
*/
public class Receiver {
public void action() {
Log.d("TAG", "夺回丢失省份,强壮中华民族!");
}
public void unAction(){
Log.d("TAG", "命令撤销,计划暴露,改日再攻击!");
}
}
抽象命令接口:
/**
* 抽象命令接口
*/
public interface Command {
void execute();
void cancel();
}
实现抽象命令接口:
/**
* 命令实现类
*/
public class ConcreteCommand implements Command {
private Receiver receiver;
public ConcreteCommand(Receiver receiver) {
super();
this.receiver = receiver;
}
@Override
public void execute() {
receiver.action();
}
@Override
public void cancel() {
receiver.unAction();
}
}
创建命令发起者:
/**
* 命令发起者
*/
public class Invoke {
private Command command;
public Invoke(Command command) {
this.command = command;
}
public void call() {
command.execute();
}
public void unCall(){
command.cancel();
}
}
调用:
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
/**
* 这是调用者
*/
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建命令对象,并指定它的接受者
Command command = new ConcreteCommand(new Receiver());
//创建命令执行者,并将相应的命令作为参数传递给Invoker
Invoke invoke = new Invoke(command);
invoke.call();
invoke.unCall();
}
}
结果:
image.png
已完成测试!有不对的地方欢迎指出,感恩。