【问题标题】:Observer pattern - Does observable needs to be always abstract?观察者模式 - observable 是否需要始终是抽象的?
【发布时间】:2018-03-19 12:47:13
【问题描述】:

我是设计模式的新手,我正在学习观察者模式,为此我去了很多网站,在那里我找到了下面的 UML 图

所以我的问题是关于 UML 或类设计。如果观察者模式的目的是通知观察者有关主体/对象状态的变化,为什么主体需要是抽象的,不能是 ConcreteSubject直接如下图:

如果我们将 Subject 创建为 ConcreteSubject 有哪些缺点或违规行为。

【问题讨论】:

    标签: oop design-patterns observable observer-pattern


    【解决方案1】:

    使 Concrete Observer 依赖于 Concrete Subject 将解决一个问题 [将 update 方法中的类型转换为 update(ConcreteSubject cs)] 但以 Pattern 的通用性为代价.

    Concrete SubjectAbstract Subject(Observable)具有明确的职责划分,即 - 实现业务逻辑并成为跨应用程序的 Observable 并照顾观察者。

    如果我们避免使用Subject,每个需要Observers 的业务类(可能会在后面添加)都必须重复Subject 的代码。 (从另一个具体主题扩展一个具体主题是违反 OO 的)。

    最好的方法是使用抽象主题保持扩展和代码重用开放。

    【讨论】:

      【解决方案2】:

      我了解定义抽象主题类的目的是提供观察者订阅和接收通知所需的属性和方法的基本实现。

      更通用的替代方法是提供接口。或者,抽象类实际上可能实现了一个更通用的接口,它只定义了必须实现的方法。

      换句话说,提供接口的好处是您不需要知道实现它的类。 使用抽象类的优点是您拥有添加或删除观察者并向他们发送通知所需的方法的基本实现。您可以通过派生类来利用这一点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多