本文最后更新于 557 天前,其中的信息可能已经有所发展或是发生改变。
一些容易混淆的设计模式,为了避免项目中命名出错,这里整理了一下差异
委托/代理/组合
委托模式(Delegate)
class Bar {} // delegate 代表
class Foo { // delegator 委托者
var bar = new Bar()
public Do(){
barImpl.Do() // delegation 委派
}
}
代理模式(Proxy)
class Bar {}
class Foo {
var bar = new Bar()
public Do() {
print("begin") // 代理模式可以增加自己的逻辑
barImpl.Do()
print("end")
}
}
代理模式属于一种委托模式,代理模式可以增加自己的逻辑
组合模式(Composition)
class Bar{}
class Foo {
var children[]: Bar
public Foo() {
children = [
new Bar(),
new Bar(),
]
}
public Bar() {
for child in children {
child.Do()
}
}
}
组合模式包含了多个子对象,是 has many 的关系。组合模式下通常父对象拥有子对象的所有权,由父对象来控制子对象的生命周期。
订阅-发布 / 生产-消费
订阅-发布,允许消息扇入扇出,通常用于事件总线、消息广播。
- 一个主题也许有多个订阅者(消息扇出)
- 一个订阅可以涵盖多个主题(消息扇入)
Ref: https://docs.nats.io/nats-concepts/subjects
生产-消费,一份消息只被一个消费者消费,通常用于分布式任务队列。