<span style="font-size:18px;">命令模式:将请求封装成对象,以便使用不同的请求、日志、队列等来参数化其他对象。命令模式也支持撤销操作。这定义不太理解,简单来说就是你的请求封装成对象,始调用命令和实现命令过程分开来,代码松耦合。
下面我们来做个遥控器,控制门、电脑、灯的开关</span>
<pre name="code" class="java">//接口
public abstract interface Common {
public void on();
public void off();
}
//门
public class Door implements Common{
@Override
public void on() {
System.out.println("开门");
}
@Override
public void off() {
System.out.println("关门");
}
}
<pre name="code" class="java"><pre name="code" class="java">//灯
public class Light implements Common{
@Override
public void on() {
System.out.println("开灯");
}
@Override
public void off() {
System.out.println("关灯");
}
}
<pre name="code" class="java">//电脑
public class Computer implements Common{
@Override
public void on() {
System.out.println("开电脑");
}
@Override
public void off() {
System.out.println("关电脑");
}
}
<pre name="code" class="java">//命令
public interface Command {
public void execute();
}
<pre name="code" class="java">/**
* 关电脑命令
* @author sunShine
*
*/
public class ComputerOffCommand implements Command{
private Computer computer ;
/*
*构造方法
*/
public ComputerOffCommand(Computer computer){
this.computer = computer;
}
@Override
public void execute() {
computer.off();
}
}
<pre name="code" class="java">/**
* 开电脑命令
* @author sunShine
*
*/
public class ComputerOnCommand implements Command{
private Computer computer ;
/*
*构造方法
*/
public ComputerOnCommand(Computer computer){
this.computer = computer;
}
@Override
public void execute() {
computer.on();
}
}
<pre name="code" class="java">/**
* 关门命令
* @author sunShine
*
*/
public class DoorOffCommand implements Command{
private Door mDoor ;
/*
*构造方法
*/
public DoorOffCommand(Door door){
this.mDoor = door;
}
@Override
public void execute() {
mDoor.off();
}
}
<pre name="code" class="java">/**
* 开门命令
* @author sunShine
*
*/
public class DoorOnCommand implements Command{
private Door mDoor ;
/*
*构造方法
*/
public DoorOnCommand(Door door){
this.mDoor = door;
}
@Override
public void execute() {
mDoor.on();
}
}
<pre name="code" class="java">/**
* 关灯命令
* @author sunShine
*
*/
public class LightOffCommand implements Command{
private Light mlLight ;
/*
*构造方法
*/
public LightOffCommand(Light light){
this.mlLight = light;
}
@Override
public void execute() {
mlLight.off();
}
}
<pre name="code" class="java">/**
* 开灯命令
* @author sunShine
*
*/
public class LightOnCommand implements Command{
private Light mlLight ;
/*
*构造方法
*/
public LightOnCommand(Light light){
this.mlLight = light;
}
@Override
public void execute() {
mlLight.on();
}
}
<pre name="code" class="java">public class Controller {
private Command[] commands;
public Controller(int buttons){
commands = new Command[buttons];
}
//按钮设置点击命令
public void setCommand(int i,Command command){
commands[i] = command;
}
//点击效果模拟
public void clickButton(int i){
commands[i].execute();
}
}
<pre name="code" class="java">public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Controller controller = new Controller(6);
Door door = new Door();
Light light = new Light();
Computer computer = new Computer();
controller.setCommand(0, new DoorOnCommand(door));//开门
controller.setCommand(1, new LightOnCommand(light));//开灯
controller.setCommand(2, new ComputerOnCommand(computer));//开电脑
controller.setCommand(3, new ComputerOffCommand(computer));//关电脑
controller.setCommand(4, new LightOffCommand(light));//关灯
controller.setCommand(5, new DoorOffCommand(door));//关门
controller.clickButton(0);
controller.clickButton(1);
controller.clickButton(2);
controller.clickButton(3);
controller.clickButton(4);
controller.clickButton(5);
}
}
大概就这这样子了。
</pre><br /><br /><pre>