【问题标题】:Object dependencies and interaction对象依赖和交互
【发布时间】:2015-02-20 05:10:36
【问题描述】:

已编辑:

我正在深入研究 OOP 概念,但是当我认为我在脑海中想通了它时,我在实践中再次感到困惑。

我创建了两个类: Light(代表一个灯泡)

public enum LightState { ON, OFF }

public class Light
{
    private LightState _state;

    public LightState CurrentState
    {
        get { return _state; }
        set { _state = value; }
    }

    public Light() : this(LightState.OFF) { }

    public Light(LightState state)
    {
        CurrentState = state;
    }
}

开关,应该改变灯泡的状态。

public class Switch
{
    private Light _light;

    public LightState State
    {
        get { return _light.CurrentState; }
        private set { _light.CurrentState = value; }
    }

    public Switch(Light light)
    {
        _light = light;
    }

    public void TurnLightsOff()
    {
        if (State.Equals(LightState.OFF))
        {
            PrintState(LightState.OFF);
        }
        else
        {
            State = LightState.OFF;
        }
    }

    public void TurnLightsOn()
    {
        if (State.Equals(LightState.ON))
        {
            PrintState(LightState.ON);
        }
        else
        {
            State = LightState.ON;
        }
    }
}

我没有得到交互部分,在我的示例中是否正确完成?

假设我介绍另一个类Man,谁可以打开/关闭开关,那么Man对象应该如何改变Switch的状态?

【问题讨论】:

  • Man 将从初始化的Switch 调用TurnLightsOff()TurnLightsOn()
  • 为什么不为 state 创建一个枚举,而不是一个带有列表的奇怪验证的 int。其目的过于复杂
  • 一个开关控制一个灯泡,但一个人可以控制多个开关。关系几乎相同。 OO明智的说法。
  • 我对这个问题有一种似曾相识的奇怪感觉
  • @SamIam 你是什么意思?

标签: c# oop


【解决方案1】:

Switch 在这里是多余的。将方法放入Light 并执行操作

public class Light 
{
    ....
    public void Flip()
    {
       if( CurrentState == LightState.ON )
       {
           CurrentState = LightState.OFF;
       } else {
           CurrentState = LightState.ON;
       }   
     }
}

一个人可以对光采取行动

public class Man
{
    ....
    public void TurnLightOn(Light light)
    {
        light.CurrentState = LightState.ON;
    }
    public void FlipLight(Light light)
    {
        light.Flip();
    }
}

【讨论】:

    猜你喜欢
    • 2018-03-09
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多