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

标签 java oop variables

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

Switch on the LightSwitch then check that Light is turn on or turn off (In this case expected answer is 'on')

请注意,当开关打开时,共享变量名称 current 将设置为 true,然后 Light 也会打开

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

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

最佳答案

有两种方法可以实现此目的。

更具体的方法

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);
       }
    }
}

观察者方法

observer design pattern可能非常适合更通用的东西,它实际上扩展了我之前给出的示例。如果您不熟悉它,这是一种实现事件的方法,从而将两个对象的状态联系起来,而当一个对象发生更改时,另一个对象会“观察”此更改并做出相应的 react 。在这种情况下,您的灯会观察开关。

关于java - Java中如何在不使用全局变量的情况下在两个类之间共享变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26938123/

相关文章:

java - 允许我正确运行使用 cin 的 C++ 代码的网站?

java - 将 Map<String, Object> 转换为 json

java - 如何使用 gradle 插件在 netbeans 中获取项目来查找 native 库?

c# - 帮助消除 friend /内部人员

javascript - 变量拒绝在 jQuery.get 回调函数中取值

java - 有没有办法为同一个 ImageView 使用多个源?

php oop 从数据库中选择数据

java - 设计模式 - Strategy and Bridge (Overlap in design)

java - 这种变量在 Android 中意味着什么? (网址...网址,整数...进度)

c# - 公共(public)属性(property)定义