如何在Java中不使用全局变量的情况下在两个类之间共享变量?

fro*_*hem 0 java oop variables

假设我有两个对象LightLightSwitch我想做的是

打开LightSwitch然后检查Light是打开还是关闭(在这种情况下,预期的答案是“打开”)

请注意,当开关打开时,共享变量名称current将设置为truethenLight也将打开

我对这个问题感兴趣的是:

  • 两个类(在这种情况下是 classLightLightSwitch)如何在不使用全局变量的情况下共享变量值(在这种情况下共享变量是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)

Avi*_*Avi 5

有 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 个对象的状态之间进行绑定,而当一个对象更改时,另一个“观察”此更改并相应地做出反应。在这种情况下,您的灯会观察开关。