设计模式——命令模式

<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>
 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值