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

首頁 > 學院 > 開發設計 > 正文

觀察者模式

2019-11-10 20:23:53
字體:
來源:轉載
供稿:網友

前言

高中和初中的時候我們班里面每次都會有一兩個同學挨著窗口坐著,當班主任來的時候,他們就會咳嗽兩聲,所有人就會立馬安靜,做一個愛學習的乖孩子,哈哈,其實觀察者模式就這種情況,一樣一樣的。

(如有異同請指出)

內容

定義:一種一對多額依賴關系,讓多個觀察者對象同事監聽某一個主題的對象,這個主題對象在狀態發生變化時,會通知所有觀察者對象,使他們能夠自動更新自己。 解釋:其實上面這一段話已經說的很明白了,觀察者模式又被叫做發布-訂閱模式,他利用的原則是依賴倒轉原則,通過抽象接口來實現解耦合,如果耦合性強的話就會,牽一發而動全身,所以我們通過抽象接口來改變,當觀察者發生變化的時候,不會影響通知者,但弊端就是觀察者離不開通知者。

1.抽象主題(例如boss類)(Subject):把觀察對象放到一個瓶子里面,每個主題都有不定量的觀察者,抽象主題提供接口,可以刪除或者是增加觀察者對象 2..具體主題(ConcreteSubject):將有關狀態存入具體觀察者對象中,在內部狀態改變時,會發給觀察者發出通知 3.. 抽象觀察者(Observer):為所有具體觀察者提供接口,可以更新自己 4.. 具體觀察者(ConcreteObserver):實現抽象觀察者所要實現的更新接口,使狀態協調。


代碼

代理類ConcreteOberve

//觀察者的名字與具體的狀態 public ConcreteOberver(ConcreteSubject subject, string name) { this.subject = subject; this.name = name; } //實現接口的更新方法 public override void Update() { observerState = subject.SubjectState; Console.WriteLine("觀察者{0}的新狀態{1}",name ,observerState );

Subject

//subject可以使主題,或者是抽象通知者,一般用一個抽象類或者一個接口實現,他把所有觀察者的對象引用在聚集里,抽象主題提供一個接口,可以增加和刪除觀察者對象 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

//抽象觀察者,為所有具體觀察者定義一個接口,得到主題的通知時更新自己,更新方法,通知者通過這個接口來實現方法 abstract class observer { public abstract void Update(); }

ConcreteSubject

//具體通知者,將有關狀態存入具體觀察者對象,當狀態改變時給所有觀察者發通知 class ConcreteSubject:Subject { private string subjectState; public string SubjectState { get { return subjectState; } set { subjectState = value; } } }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 余庆县| 宣汉县| 南澳县| 桂林市| 雅安市| 休宁县| 枝江市| 凤阳县| 丰县| 石台县| 息烽县| 凤山市| 沂南县| 汕头市| 巴彦县| 常州市| 合江县| 凤台县| 界首市| 屏东市| 盐城市| 彩票| 清新县| 成都市| 南丰县| 旬邑县| 衡南县| 吉木萨尔县| 北碚区| 密云县| 皮山县| 克什克腾旗| 临泽县| 东乌| 昭平县| 峨眉山市| 芜湖县| 永定县| 铜梁县| 台中县| 呼伦贝尔市|