【java设计模式】命令模式——电视机是请求的接收者,遥控器是请求的发送者,遥控器上有一些按钮,不同的按钮对应电视机的不同操作。

      命令模式(Command Pattern):将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。
命令模式包含如下角色:
Command(抽象命令类):一般是一个接口,在其中声明了用于执行请求的excute()等方法,通过这些方法可以调用请求接收者的相关操作。
ConcreteCommand(具体命令类):具体命令类是抽象命令类的子类,实现了在抽象命令类中声明的方法,它对应具体的接收者对象,绑定接收者对象的动作。在实现execute()方法时,将调用接收者对象的相关操作。
Invoker(调用者):调用者即请求的发送者,又称为请求者,它通过命令对象来执行请求。一个调用者并不需要在设计时确定其接收者,因此它只与抽象命令类之间存在关联关系。在程序运行时将调用具体命令对象的excute()方法,间接调用接收者的相关操作。
Receiver(接收者):接收者执行与请求相关的操作,它具体实现对请求的业务处理.

在这里插入图片描述
创建一个抽象命令接口

public interface AbstractCommand {
	public void execute();

}

创建一个命令类

package command;

public class Controller {
	private AbstractCommand openCommand,closeCommand,changeCommand;
	public Controller(AbstractCommand openCommand,AbstractCommand closeCommand,AbstractCommand changeCommand) {
		this.openCommand=openCommand;
		this.closeCommand=closeCommand;
		this.changeCommand=changeCommand;
	}
	public void open() {
		openCommand.execute();
	}
	public void change() {
		changeCommand.execute();
	}
	public void close() {
		closeCommand.execute();
	}

}

创建实现了 AbstractCommand 接口的实体类

package command;

public class TVChangeCommand implements AbstractCommand{
	private Television tv;
	public TVChangeCommand() {
		tv=new Television();
	}
	@Override
	public void execute() {
		// TODO Auto-generated method stub
		tv.changeChannel();
	}

}

package command;

public class TVCloseCommand implements AbstractCommand {

	private Television tv;
	public TVCloseCommand() {
		tv=new Television();
	}
	@Override
	public void execute() {
		// TODO Auto-generated method stub
		tv.close();
	}

}

package command;

public class TVOpenCommand implements AbstractCommand {
	private Television tv;
	public TVOpenCommand() {
		tv=new Television();
	}
	@Override
	public void execute() {
		// TODO Auto-generated method stub
		tv.open();
	}

}

执行类

package command;

public class Client {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		AbstractCommand openCommand,closeCommand,changeCommand;
		openCommand=new TVOpenCommand();
		closeCommand=new TVCloseCommand();
		changeCommand=new TVChangeCommand();
		
		Controller control =new Controller(openCommand,closeCommand,changeCommand);
		control.open();
		control.change();
		control.close();
	}

}

运行结果:
在这里插入图片描述
源码
https://github.com/MeetNiceMe/java-strategy

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值