spring 中觀察者模式使用案例
案例
客戶簽署放款合同,當合同簽署完畢後,通知財務進行放款
建立客戶類,提供合同簽署方法
//客戶
class
user
//合同簽署方法
public
void
sign()
}
建立財務類,提供放款方法,當客戶簽署合同完畢後,通過財務物件呼叫該方法實現放款
//會計
class
accountant
//放款方法
public
void
grant
(string username)
}
呼叫測試
public
static
void
main
(string[
] args)
分析可能存在的問題:假設當使用者簽署合同後,除了要通知財務放款以外還需要通知其他人怎麼辦? 例如通知公司hr,對該客戶的負責人增加績效,通知該客戶的負責人,你的客戶已簽署合同…在現在的傳統模式下如果要增加其他通知物件,除了要建立其他通知物件,增加通知方法以外,最主要的是要修改現在的user類,將要通知的其他物件新增到user中,簽署合同成功以後,通過user中持有的通知物件,呼叫方法,執行後續操作,user中持有需要通知的物件,**耦合,在修改user新增新通知物件時,違反了ocp開閉原則,並且無法做到動態新增,刪除通知物件簡單理解觀察者模式觀察者模式角色分析重點關注,新增,刪除,通知觀察者,與觀察者更新狀態的方法
案例:明星發布動態,粉絲關注明星,檢視明星動態
分析:明星為被觀察者,關注的粉絲為觀察者,可以有多個粉絲,粉絲可以關注,可以取消關注
建立抽象被觀察者
inte***ce
subject
建立具體被觀察者,明星
//具體被觀察者
class
starsubject
implements
subject
//註冊,向observerlist容器中新增新的觀察者
@override
public
void
registerobserver
(observer o)
//刪除,在observerlist中刪除某個觀察者
@override
public
void
removeobserver
(observer o)
//通知,假設當前明星更新了動態,將給信的動態推送給粉絲
//通知我方頁面進行重新整理展示
@override
public
void
notifyobservers()
}//明星發布動態方法
public
void
datachange
(string jsonobj)
}
建立抽象觀察者,提供更新自身的抽象方法
//抽象觀察者,提供了更新自身的抽象方法
inte***ce
observer
建立具體觀察者,粉絲
//具體觀察者,實現抽象觀察者,重寫更新方法
class
fansobserver
implements
observer
//當明星發布動態時,通過該方法,將動態資訊傳遞給當前粉絲
@override
public
void
update
(string jsonobj)
}
呼叫測試
檢視 spring 中事件監聽的功能,就是通過觀察者模式來搭建的,
我們可以把被觀察者(subject)替換成事件(event),把對特定主題進行觀察的觀察者(observer)替換成對特定事件進行監聽的***(eventlistener),而把原有主題中負責維護主題與觀察者對映關係以及在自身狀態改變時通知觀察者的職責從中抽出,放入乙個新的角色事件發布器(eventpublisher)中
/**
*/public
class
mailsendevent
extends
public string getto()
}
@component
public
class
mailsendlistener
implements
}
發布事件
@component
("mailsender"
)public
class
mailsender
}
呼叫測試
public
class
springeventtest
}
python觀察者模式 python 觀察者模式
python 觀察者模式 前言e 寫的倉促就不截uml類圖了,書本chapter10,p313能看到圖 一旦觀察的主題有更新,就會通知到觀察者們,下面的例子是最簡單的乙個觀察者範例,假設這是一群投機分子密切關注 軍 火 倉庫的產品與數量變動 class inventory def init self...
觀察者模式
觀察者模式 observer 完美的將觀察者和被觀察的物件分離開。舉個例子,使用者介面可以作為乙個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,發現資料變化後,就顯示在介面上。物件導向設計的乙個原則是 系統中的每個類將重點放在某乙個功能上,而不是其他方面。乙個物件只做一件事情,並且將他做...
觀察者模式
觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態上發生變化時,會通知所有觀察者物件,讓他們能夠自動更新自己 任何乙個模式都是離不開角色的,這裡也會有幾種角色 抽象主題角色 把所有對觀察者物件的引用儲存在乙個集合中,每個抽象主題角色都可以有任意數量的觀察...