查看我的解决方案如果您想要在LightSwitch & Light之间解除耦合。您可以轻松地添加/删除灯之间的联系,并切换
灯类:
public class Light {
private boolean on;
public void setOn(boolean on) {
this.on = on;
}
public boolean isOn() {
return on;
}
}
的LightSwitch类:
public class LightSwitch {
private boolean on;
private Map<String, SwitchListener> listeners = new HashMap<String, SwitchListener>();
public void switchState() {
on = !on;
SwitchEvent event = new SwitchEvent(on);
for (SwitchListener switchListener : listeners.values()) {
switchListener.switchPerformed(event);
}
}
public void addListener(String id, SwitchListener listener) {
listeners.put(id, listener);
}
public void removeListener(String id) {
listeners.remove(id);
}
}
SwitchEvent类:
public class SwitchEvent {
private boolean on;
public SwitchEvent(boolean on) {
this.on = on;
}
public boolean isOn() {
return on;
}
}
SwitchListener类:
public interface SwitchListener {
void switchPerformed(SwitchEvent event);
}
使用例如:
public static void main(String[] args) {
LightSwitch lightSwitch = new LightSwitch();
final Light light1 = new Light();
final Light light2 = new Light();
lightSwitch.addListener("light1", new SwitchListener() {
@Override
public void switchPerformed(SwitchEvent event) {
light1.setOn(event.isOn());
}
});
lightSwitch.addListener("light2", new SwitchListener() {
@Override
public void switchPerformed(SwitchEvent event) {
// Example: light 1 on, light 2 off -- light 1 off, light 2 on
light2.setOn(!event.isOn());
}
});
// Test switch
lightSwitch.switchState(); // light 1 ON, light 2 OFF
lightSwitch.switchState(); // light 1 OFF, light 2 ON
}
来源
2014-11-14 20:44:29
Loc
听起来像经典的观察者设计模式可以适应这里。 – Avi 2014-11-14 20:23:05
你是什么意思“全局变量”?你的意思是静态变量? – Loc 2014-11-14 20:26:22
@LocHa是的,有点像'公共静态...' – fronthem 2014-11-14 20:30:03