2017-10-08 84 views
0

我新的设计模式,我正在学习Observer模式的,我去了很多的网站,在那里我发现UML图下面观察者模式 - 可观察的需要总是抽象的吗?

enter image description here

所以我的问题是关于UML或类design.If观察者模式的目的是通知有关在主体/客体,为什么受试者需要是抽象不能直接成为ConcreteSubject的状态的变化的观察员,如下所示:

enter image description here

什么是dis如果我们将主题创建为具体主题,则可能会带来好处或违规。

回答

3

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

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

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

1

制作混凝土观察员取决于混凝土主体将解决的一个问题,但在模式的一般性质的成本[在更新方法更新(ConcreteSubject CS)类型铸造。

具体的研究对象摘要主题(可观察)有明确的责任划分,即 - 实现业务逻辑,并在应用程序可观察到的,并采取观察员的照顾。

如果我们避免使用Subject,每个需要观察者的业务类(可能会添加到行)将不得不重复主题的代码。 (从另一个具体主题扩展一个具体主题违反了OO)。

最好的方法将是使用摘要主题保持扩展和代码重用打开。