查看我的解決方案如果您想要在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