观察模式
观察模式(Observer Pattern): 实现观察者模式时要注意具体目标对象和具体观察者对象之间不能直接调用,
否则将使两者之间紧密耦合起来,这违反了面向对象的设计原则.
优点 和 缺点
优点:
- 观察者和被观察者是抽象耦合的
- 建立一种触发机制
缺点:
- 如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| type Customer interface { update() }
type CustomerA struct { }
func (*CustomerA) update() { fmt.Println("A") }
type CustomerB struct { }
func (*CustomerB) update() { fmt.Println("B") }
type NewsOffice struct { customers []Customer }
func (n *NewsOffice) addCustomer(customer Customer) { n.customers = append(n.customers, customer) }
func (n *NewsOffice) newspaperCome() { n.notifyAllCustomer() }
func (n *NewsOffice) notifyAllCustomer() { for _, customer := range n.customers { customer.update() } }
|