一般OO设计模式

时间:2012-04-15 01:45:32

标签: oop design-patterns delegates notifications

考虑以下一般程序结构:

  • A类有一个B类实例作为成员变量
  • B类有一个包含C类实例的集合成员变量
  • A类中的事件由A传播到C实例,只是告诉B关于事件

关于C级回到A级的实例有哪些设计模式?

一个选项是A类订阅的C类发布通知的实例。另一个选择是将一个引用传递给A类“沿着链”(从A到B,然后从B到每个C)。后一种选择允许C的实例直接与A对话。

1 个答案:

答案 0 :(得分:3)

如果你的意思是设计模式(即GoF品种),那么这些将是一些相关选项:

  • 命令:将回调传递给C项(直接或间接通过B),这样当他们想要回到A时,他们可以简单地调用这个回调 - 甚至可以有参数
  • 迭代器:B将其聚合集合的视图直接公开给A;然后直接在AC之间进行通信
  • 调解员:公开AC可能订阅的通知;通过发布活动来完成沟通
  • 观察员:您已经建议的第一个选项

另一方面,如果你的意思是架构模式,那么典型的选择是:

  • 您的第一个选项A订阅C个活动。乍一看这看起来并不像一个全面的好主意,除非事件一直非常有用,因为它需要n个对象将指针聚合回回调,在最坏的情况下它们甚至可以只使用一次。
  • 传递对A的引用是另一种选择,但如果您要使用方法污染A的公共接口,以便C可以回调它,则不是一个好选择在非常具体的情况下。如果A已公开合适的接口,则可能非常有效,但请注意,您可能需要C之间的适配器类回调A以便不紧密耦合{{1}转到C的界面。
  • 第三个选项是A直接迭代A提供的集合(视图)并向B个实例提供回调;这样做的优点是耦合松散,并且使用的内存最少,但编码可能有点棘手。