通用面向对象设计模式

4
考虑以下通用程序结构:
  • 类A具有一个类B的实例作为成员变量
  • 类B具有一个包含类C实例的集合成员变量
  • 类A中的事件通过简单地告诉B来传播到C实例
关于类C实例回应类A,有哪些设计模式? 一种选择是类C的实例发布通知,而类A订阅该通知。另一种选择是将对类A的引用“向下”传递(从A到B,然后从B到每个C)。这种后一种选择允许C的实例直接与A交流。

Programmers.SE 更适合设计和概念问题。 - outis
你是在寻找特定的设计模式,还是寻求可能使用设计模式的最佳解决方案? - MikeSW
设计模式存在的目的是为了解决在特定情境下经常出现的问题。我没有看到您指定任何问题。 - Fuhrmanator
1个回答

3
如果您指的是设计模式(即GoF类型),那么以下是一些相关选项:
- Command:将回调传递给C项(直接或间接通过B),以便当它们想要回复A时,可以简单地调用此回调--甚至可以具有参数 - Iterator:B直接向A公开其聚合集合的视图; A和C之间的通信就是直接完成的 - Mediator:向A和C可能订阅的通知进行公开;通过发布事件来完成通信 - Observer:这是您已经建议作为第一个选项的内容
另一方面,如果你真的意味着架构模式,那么典型的选择是:
- 您提出的第一个选项,A订阅C事件。乍一看,这看起来不像是一个全面的好主意,除非事件在所有时间都非常有用,因为它需要n个对象聚合回调的指针,而在最坏的情况下,它们甚至只能使用一次。 - 将引用传递给A是另一个选项,但如果您要污染A的公共接口以便C可以在非常特定的情况下回调它,则不是一个好的选项。如果A已经公开了合适的接口,那么它可能非常有效,但请注意,您可能需要一个适配器类,在C回调到A之间不要紧密耦合A的接口。 - 第三个选项是,A直接迭代(一个视图)由B提供的集合,并向C实例提供回调;它具有相当松散的耦合优点,并且使用最少的内存,但编程可能会有些棘手。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接