标签:over 调用 err 解耦 code pen class 方法 java
代码实例
/**
* 需求场景,有一个遥控器,需要调用许多第三方厂家的电器的开和关功能。
* 并且不同第三方厂家的开关函数名称不同。如何实现遥控器与家电的解耦。
* 注意:遥控器所绑定的家电会不断变化,硬编码几乎无法维护。
*/
/**
* 遥控器类
*/
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();
}
}
标签:over 调用 err 解耦 code pen class 方法 java
原文地址:https://www.cnblogs.com/bosslv/p/11350990.html