Bob叔叔的敏捷原理书中给出的接口隔离原理示例的实现

时间:2019-06-20 06:22:36

标签: c# oop design-patterns agile

我对图12-1的实现正确吗? Figure12-1

这是Bob叔叔的书《 C#中的敏捷原理模式和实践》中接口污染示例的实现。

我尝试过如下实现:-

data scientist

我的疑问在于书中描述实现的方式,其中,Door有时被称为类或有时被称为接口,而我是否需要除IDoor之外单独拥有Door类的实现感到困惑接口? 同样,作者在命名接口时不使用I表示法,这使它更加混乱。

如果有人读过这本书,希望我能理解我的关心,并为此提供帮助。

注意:这本书也可以在线阅读。该讨论在第215页。 https://druss.co/wp-content/uploads/2013/10/Agile-Principles-Patterns-and-Practices-in-C.pdf

1 个答案:

答案 0 :(得分:2)

我相信他正在使用UML类图表示法,因此该图似乎适用:

enter image description here

Link

如果我没看错,TimedDoor应该继承自 Door。但是在您的示例中,TimedDoor 实现 IDoor。这与图表不一致。

声明应为:

class TimedDoor : Door

我认为您不需要IDoor。该示例的意义在于Door必须实现ITimerClient以便Timer对其执行操作。 ITimerClient应该公开一个公共成员Timeout()。大概是当计时器调用此方法时,如果门是定时门,则门应自行解锁。默认行为(例如,对于非定时门)可能是无操作。

interface ITimerClient
{
    void Timeout();
}

class Door : ITimerClient
{
    public virtual void Timeout()
    {
        //No operation; this isn't a timed door
    }

    //etc.
}

class TimedDoor : Door
{
    protected bool locked = true;

    public override void Timeout()
    {
        this.Unlock();  //Override default behavior because this type of door is timed
        base.Timeout();  //Optional, sometimes recommended
    }

    public virtual void Unlock()
    {
        this.locked = false;
    }

    //etc.
}