高中和初中的時(shí)候我們班里面每次都會(huì)有一兩個(gè)同學(xué)挨著窗口坐著,當(dāng)班主任來(lái)的時(shí)候,他們就會(huì)咳嗽兩聲,所有人就會(huì)立馬安靜,做一個(gè)愛(ài)學(xué)習(xí)的乖孩子,哈哈,其實(shí)觀察者模式就這種情況,一樣一樣的。
(如有異同請(qǐng)指出)
定義:一種一對(duì)多額依賴關(guān)系,讓多個(gè)觀察者對(duì)象同事監(jiān)聽(tīng)某一個(gè)主題的對(duì)象,這個(gè)主題對(duì)象在狀態(tài)發(fā)生變化時(shí),會(huì)通知所有觀察者對(duì)象,使他們能夠自動(dòng)更新自己。 解釋:其實(shí)上面這一段話已經(jīng)說(shuō)的很明白了,觀察者模式又被叫做發(fā)布-訂閱模式,他利用的原則是依賴倒轉(zhuǎn)原則,通過(guò)抽象接口來(lái)實(shí)現(xiàn)解耦合,如果耦合性強(qiáng)的話就會(huì),牽一發(fā)而動(dòng)全身,所以我們通過(guò)抽象接口來(lái)改變,當(dāng)觀察者發(fā)生變化的時(shí)候,不會(huì)影響通知者,但弊端就是觀察者離不開(kāi)通知者。
1.抽象主題(例如boss類)(Subject):把觀察對(duì)象放到一個(gè)瓶子里面,每個(gè)主題都有不定量的觀察者,抽象主題提供接口,可以刪除或者是增加觀察者對(duì)象 2..具體主題(ConcreteSubject):將有關(guān)狀態(tài)存入具體觀察者對(duì)象中,在內(nèi)部狀態(tài)改變時(shí),會(huì)發(fā)給觀察者發(fā)出通知 3.. 抽象觀察者(Observer):為所有具體觀察者提供接口,可以更新自己 4.. 具體觀察者(ConcreteObserver):實(shí)現(xiàn)抽象觀察者所要實(shí)現(xiàn)的更新接口,使?fàn)顟B(tài)協(xié)調(diào)。
代理類ConcreteOberve
//觀察者的名字與具體的狀態(tài) public ConcreteOberver(ConcreteSubject subject, string name) { this.subject = subject; this.name = name; } //實(shí)現(xiàn)接口的更新方法 public override void Update() { observerState = subject.SubjectState; Console.WriteLine("觀察者{0}的新?tīng)顟B(tài){1}",name ,observerState );Subject
//subject可以使主題,或者是抽象通知者,一般用一個(gè)抽象類或者一個(gè)接口實(shí)現(xiàn),他把所有觀察者的對(duì)象引用在聚集里,抽象主題提供一個(gè)接口,可以增加和刪除觀察者對(duì)象 abstract class Subject { //有多少觀察者 PRivate IList<observer> observers = new List<observer>(); //增加和刪除觀察者 public void Attach(observer observer) { observers.Add(observer ); } public void Detach(observer observer) { observers.Remove(observer); } //遍歷通知 public void Notify() { foreach (observer o in observers ) { o.Update(); } } }observer
//抽象觀察者,為所有具體觀察者定義一個(gè)接口,得到主題的通知時(shí)更新自己,更新方法,通知者通過(guò)這個(gè)接口來(lái)實(shí)現(xiàn)方法 abstract class observer { public abstract void Update(); }ConcreteSubject
//具體通知者,將有關(guān)狀態(tài)存入具體觀察者對(duì)象,當(dāng)狀態(tài)改變時(shí)給所有觀察者發(fā)通知 class ConcreteSubject:Subject { private string subjectState; public string SubjectState { get { return subjectState; } set { subjectState = value; } } }新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注