【发布时间】:2012-02-17 12:27:20
【问题描述】:
我有以下界面。
PowerSwitch.java
public interface PowerSwitch {
public boolean powerOn();
public boolean powerOff();
public boolean isPowerOn();
}
上述接口应包含可以派生任何其他功能的最少方法集,以便尽可能轻松地添加其他 PowerSwitch 实现。
我想在运行时向 PowerSwitch 接口添加功能(装饰器所做的),方法是创建一个包含 PowerSwitch 实例的组合并添加新方法的类,例如两个 toggleOnOff() 方法如下。这样我只需要实现两个切换方法一次,它将适用于所有 PowerSwitch 实现。
这被认为是一种好/坏的做法吗?如果不好,还有其他建议吗?
它并不真正符合装饰器模式,因为它添加了额外的方法。它是一种策略模式,还是一种组合模式?还是它有另一个模式名称?有没有“界面装饰器”之类的东西?
PowerSwitchDecorator.java
public class PowerSwitchDecorator {
private PowerSwitch ps;
public PowerSwitchDecorator(PowerSwitch ps) {
this.ps = ps;
}
public void toggleOnOff(int millis) throws InterruptedException{
powerOn();
Thread.sleep(millis);
powerOff();
}
public void toggleOnOff(){
powerOn();
powerOff();
}
public boolean powerOn() {
return ps.powerOn();
}
public boolean powerOff() {
return ps.powerOff();
}
public boolean isPowerOn() {
return ps.isPowerOn();
}
}
【问题讨论】:
-
为什么PowerSwitchDecorator不实现PowerSwitch接口?它当然可以...
标签: java design-patterns decorator strategy-pattern