我有观察者模式的问题。它说Observer和Subject应该都是接口。我明白为什么观察者是接口,但为什么将这个主题设为抽象类是不是更好?你不能已经实施至少删除/注册?观察者模式抽象与接口
回答
设计模式旨在适应应用程序的特定需求;他们并没有制定规则。特别是要确定某个抽象类或接口是否属于某个抽象类或接口,并考虑该决定对其他应用程序的所有影响。
也就是说,出于多种原因,接口被推荐超过抽象类。例如,抽象类需要使用继承,并且在许多语言中,您不能从多个类继承。如果这对您的用例不是问题,请继续使用抽象类,如果您发现它们更方便。
为什么不只有一个实现Subject的抽象类?使用界面只是给你更大的灵活性。从抽象类开始,它并不真正为你购买任何东西。如果每一件事情都发生了很大的变化(比如跨越进程边界),那么你的Observable将会停留在抽象实现上。
好感谢ü所有球员的帮助很大:) – Maximosaic
为什么没有更好的有主题的抽象类
为了避免追平了设计一个特定的具体实施。记住目的是创建一个模式,使您能够灵活地根据需要交换具体主题,并且不会将观察者与任何原始实现相关联。
您不希望观察者引用FirstConcreteSubject
,而是引用ISubject
,它可以快速更改为由SecondConcreteSubject
实现而无需修改观察者。
也就是说,没有什么不对(IMHP)有一个抽象类来存储一些本来被FirstConcreteSubject
和SecondConcreteSubject
重复的代码。
在使用word界面的设计模式中,它意味着暴露给客户端组件的抽象API将具有不同的具体实现。
当设计模式接口映射到Java世界时,它可能是Java接口或Java抽象类,而设计模式具体类映射到Java常规类(非抽象)。
但是,在作出决定时,您需要了解Java界面和抽象类之间的差异及其用途以及优缺点。
- 1. 抽象类定义观察者接口
- 2. 与观察者模式
- 3. 观察者模式 - 观察者创建
- 4. 接口观察者模式:空对象引用
- 5. 观察者模式 - 可观察的需要总是抽象的吗?
- 6. 观察者模式
- 7. 实现观察者模式在Delphi与接口
- 8. 观察者模式-受试者保持到由观察者
- 9. 代表与观察者模式
- 10. 观察者/可观察模式的链接
- 11. 异步观察者模式
- 12. 实现观察者模式
- 13. 了解观察者模式
- 14. 观察者模式imp
- 15. asp.net观察者模式
- 16. jQuery和观察者模式
- 17. 观察者模式混淆
- 18. MVC和观察者模式
- 19. 观察者模式建议
- 20. 观察者模式类(JAVA)
- 21. Vue.js和观察者模式
- 22. SI +观察者模式
- 23. 观察者模式vs MVC
- 24. python观察者模式
- 25. 抽象接口模式
- 26. 德尔菲的接口继承和观察者模式
- 27. 当观察者修改对象状态时使用观察者模式
- 28. 观察者模式:如何区分观察者
- 29. 具有两个观察者列表的观察者模式
- 30. 观察者设计模式 - 具体主题和观察者
在许多方面,理想的模式是有其实现的接口一个抽象类,但从来没有定义抽象的任何存储位置类类型 - 始终使用该接口。这将允许可以从抽象类型派生的类简单地继承有用的代码,而那些必须从其他类型派生的类可以将任何通用代码作为样板文件导入。但是,如果某些类型的使用者使用抽象类型而不是接口类型,那么这种方法就会失败,尽管除非类需要访问其他实例的私有数据,否则这种方法不是必需的。 – supercat