设计模式-命令模式
Posted bosslv
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-命令模式相关的知识,希望对你有一定的参考价值。
- 主要思想,将方法封装为类,重载同一个方法,实现请求者与调用者的解耦。
- 例子:
Thread类。所有交给Thread的执行的类都要实现Runnable接口的run()方法,Thread类只负责执行run()方法,而不是具体类的具体方法。 代码实例
/** * 需求场景,有一个遥控器,需要调用许多第三方厂家的电器的开和关功能。 * 并且不同第三方厂家的开关函数名称不同。如何实现遥控器与家电的解耦。 * 注意:遥控器所绑定的家电会不断变化,硬编码几乎无法维护。 */ /** * 遥控器类 */ class Controller private Command[] commands; public void setCommands(Command[] commands) this.commands = commands; public void invoke() for (Command command : commands) command.open(); command.close(); // 遥控器测试 public static void main(String[] args) Controller controller = new Controller(); TVCommand tvCommand = new TVCommand(); tvCommand.setTV(new TV()); FanCommand fanCommand = new FanCommand(); fanCommand.setFan(new Fan()); Command[] commands = new Command[2]; commands[0] = tvCommand; commands[1] = fanCommand; controller.setCommands(commands); controller.invoke(); /** * 第三方家电,电视 */ class TV public void on() System.out.println("打开电视"); public void off() System.out.println("关闭电视"); /** * 第三方家电,电扇 */ class Fan public void turnOn() System.out.println("打开电扇"); public void turnOff() System.out.println("关闭电扇"); /** * 命令模式,将方法封装为类 */ interface Command void open(); void close(); /** * 方法封装,关键 */ class TVCommand implements Command private TV tv; public void setTV(TV tv) this.tv = tv; @Override public void open() tv.on(); @Override public void close() tv.off(); class FanCommand implements Command private Fan fan; public void setFan(Fan fan) this.fan = fan; @Override public void open() fan.turnOn(); @Override public void close() fan.turnOff();
以上是关于设计模式-命令模式的主要内容,如果未能解决你的问题,请参考以下文章