fro*_*hem 0 java oop variables
假设我有两个对象Light,LightSwitch我想做的是
打开
LightSwitch然后检查Light是打开还是关闭(在这种情况下,预期的答案是“打开”)
请注意,当开关打开时,共享变量名称current将设置为truethenLight也将打开
我对这个问题感兴趣的是:
Light和LightSwitch)如何在不使用全局变量的情况下共享变量值(在这种情况下共享变量是current)?预期输出(或者只是你喜欢的另一个输出,可以告诉我好的,灯打开/关闭):
switch on: true // This line just set variable `current` in `LightSwitch` class
Light is turned on // This line just check that `current` variable in `Light` class is True or false
switch on: false
Light is turned off
Run Code Online (Sandbox Code Playgroud)
有 2 种方法。
更具体的方法
public class Light implements Switchable{
private boolean on;
@Override
public boolean isOn() { return on; }
@Override
public void setIsOn(boolean on) { this.on = on; }
}
public class LightSwitch {
public void List<Switchable> switchables = new ArrayList<Switchable>(); // A generic list of things that are controlled by the switch. Doesn't have to be lights.
public void off() { setState(false); }
public void on() { setState(true); }
private void setState(boolean state) {
for(Switchable switchable: switchables) {
switchable.setIsOn(state);
}
}
}
Run Code Online (Sandbox Code Playgroud)
观察者方法
在观察者设计模式可能是一个非常不错的选择更多的东西通用的,它实际上是扩展了我之前给的例子。如果您不熟悉它,它是一种实现事件的方法,从而在 2 个对象的状态之间进行绑定,而当一个对象更改时,另一个“观察”此更改并相应地做出反应。在这种情况下,您的灯会观察开关。