深入浅出设计模式六——封装调用(命令模式)

本文介绍了一种常用的设计模式——命令模式,并通过一个遥控器API的开发案例进行了详细讲解。该模式将请求封装成对象,使得可以使用不同的请求来参数化对象、将请求放入队列或者记录请求日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 命令模式:

将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。

UML图:

解析UML图:

示例:

现在需要开发一个遥控器的API,当遥控器的某个按钮按下去之后,插座上对应的机器能够操作.如灯亮,风扇转等,但注意了插座对应的设备是可变化的,或者说仍有空余的插座是预留给新设备的.

采用Command模式代码如下:

 

package com.lwf.command;

public interface Command {
	public void excute();
}

 

package com.lwf.command;

public class LineOnCommand implements Command {

	Light light;
	public LineOnCommand(Light light){
		this.light = light;
	}
	public void excute() {
		light.on();
	}

}

 

package com.lwf.command;

public class LineOffCommand implements Command {

	Light light;
	LineOffCommand(Light light){
		this.light = light;
	}
	public void excute() {
		light.off();
	}

}

 

package com.lwf.command;

public class Light {

	public void on(){
		System.out.println("on");
	}

	public void off() {
		System.out.println("off");		
	}
}

 

package com.lwf.command;

public class SimpleRemoteControl {

	Command command;
	public void setCommand(Command command){
		this.command = command;
	}
	
	public void buttonWasPressed(){
		command.excute();
	}
}

 

package com.lwf.command;

public class Client {

	/*
	 * 客户端负责创建command对象并设置接收者light
	 */
	public static void main(String[] args) {
		
		//客户client创建command对象并设置接收者light
		Light light = new Light();
		Command command = new LineOnCommand(light);
		
		//调用者(遥控器)invoker,持有command对象,并设置具体的Command对象.在自己的方法中调用command的excute方法.
		SimpleRemoteControl s = new SimpleRemoteControl();
		s.setCommand(command);
		s.buttonWasPressed();
		
		command = new LineOffCommand(light);
		s.setCommand(command);
		s.buttonWasPressed();
	}
}

 

测试结果:

on

off

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值