国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

觀察者模式

2019-11-10 21:33:30
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

高中和初中的時(shí)候我們班里面每次都會(huì)有一兩個(gè)同學(xué)挨著窗口坐著,當(dāng)班主任來(lái)的時(shí)候,他們就會(huì)咳嗽兩聲,所有人就會(huì)立馬安靜,做一個(gè)愛(ài)學(xué)習(xí)的乖孩子,哈哈,其實(shí)觀察者模式就這種情況,一樣一樣的。

(如有異同請(qǐng)指出)

內(nèi)容

定義:一種一對(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; } } }
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 蓝山县| 青神县| 木兰县| 阿勒泰市| 赤城县| 调兵山市| 酒泉市| 遵化市| 汶川县| 屏边| 西丰县| 潞城市| 十堰市| 乐陵市| 天门市| 神农架林区| 金秀| 荥阳市| 玉屏| 德清县| 朝阳区| 中江县| 承德市| 涟水县| 林甸县| 郴州市| 百色市| 寻甸| 南康市| 布拖县| 房产| 阳新县| 辉县市| 尉犁县| 淄博市| 磴口县| 曲周县| 霍城县| 德昌县| 德保县| 潞城市|