1、定義
在對象之間定義一對多的依賴,這樣一來,當一個對象改變時狀態(tài),依賴他的對象會收到通知,并自動更新。這種模式以松耦合方式在一些列對象之間改變狀態(tài)。MVC模式就是觀察者模式的一個代表。
2、實用性
當一個抽象模型有兩個方面, 其中一個方面依賴于另一方面。將這二者封裝在獨立的對象中以使它們可以各自獨立地改變和復(fù)用。
當對一個對象的改變需要同時改變其它對象, 而不知道具體有多少對象有待改變。
當一個對象必須通知其它對象,而它又不能假定其它對象是誰。換言之, 你不希望這些對象是緊密耦合的。
在對象之間定義一對多的依賴,這樣一來,當一個對象改變時狀態(tài),依賴他的對象會收到通知,并自動更新。這種模式以松耦合方式在一些列對象之間改變狀態(tài)。MVC模式就是觀察者模式的一個代表。
2、實用性
當一個抽象模型有兩個方面, 其中一個方面依賴于另一方面。將這二者封裝在獨立的對象中以使它們可以各自獨立地改變和復(fù)用。
當對一個對象的改變需要同時改變其它對象, 而不知道具體有多少對象有待改變。
當一個對象必須通知其它對象,而它又不能假定其它對象是誰。換言之, 你不希望這些對象是緊密耦合的。
3、設(shè)計原則
找出程序中會變化的方面,然后將其和固定不變的方面相分離
在觀察者模式中,會改變的是主題的狀態(tài),以及觀察者的數(shù)目和類型。用這個模式,你可以依賴于主題狀態(tài)的對象,卻不必改變主題。這就叫提前規(guī)劃。
針對接口編程,不針對實現(xiàn)編程
主題與觀察者都使用接口:觀察者利用主題的接口,向主題注冊;而主題利用觀察者的接口通知接口。這樣可以讓兩者之間運作正常,又同事具有松耦合的優(yōu)點。
多用組合,少用繼承
觀察者模式利用“組合”,將許多觀察者組合進主題中。對象之間的這種關(guān)系不是通過繼承產(chǎn)生的,而是在運行時利用組合的方式而產(chǎn)生的。
4、實現(xiàn)