Oop 通用面向对象设计模式
考虑以下一般程序结构:Oop 通用面向对象设计模式,oop,design-patterns,delegates,notifications,Oop,Design Patterns,Delegates,Notifications,考虑以下一般程序结构: 类A有一个类B的实例作为成员变量 类B有一个包含类C实例的集合成员变量 类A中的事件通过A简单地告诉B该事件而传播到C实例 与A类对话的C类实例相关的设计模式是什么? 一个选项是A类订阅的C类发布通知实例。另一个选项是将对a类的引用“向下传递”(从a传递到B,然后从B传递到每个C)。后一个选项允许C实例直接与A对话。如果您字面上指的是设计模式(即GoF类型),则以下是一些相关选项: 命令:将回调传递给C项(直接或间接通过B),这样,当它们想要与a进行对话时,就可以简
- 类A有一个类B的实例作为成员变量
- 类B有一个包含类C实例的集合成员变量
- 类A中的事件通过A简单地告诉B该事件而传播到C实例
- 命令:将回调传递给
项(直接或间接通过B),这样,当它们想要与C
进行对话时,就可以简单地调用此回调,甚至可以使用参数a
- 迭代器:
将其聚合集合的视图直接公开给B
;然后直接在a
和A
之间进行通信C
- 中介:公开
和A
可能订阅的通知;沟通是通过发布事件来完成的C
- 观察家:你已经建议的第一个选项是什么
- 您的第一个选项,
订阅A
事件。乍一看,这似乎不是一个全面的好主意,除非事件始终非常有用,因为它需要C
对象聚合一个指向回调的指针,在最坏的情况下,它们甚至可以只使用一次n
- 传递对
的引用是另一种选择,但如果您打算用方法污染A
的公共接口,而A
可以在非常特定的场景中调用它,那么这不是一个好的选择。如果C
已经公开了一个合适的接口,那么它会非常有效,但是请注意,在A
之间可能需要一个适配器类来回调C
,以避免A
与C
的接口紧密耦合A
- 第三个选项是
直接迭代A
提供的集合(视图),并向B
实例提供回调;这样做的优点是非常松散耦合,并且使用的内存量最少,但编写代码可能有点棘手C