欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

觀察者(Observer)模式

系統(tǒng) 1650 0

觀察者模式又叫做發(fā)布-訂閱(Publish/Subscribe)模式、模型-視圖(Model/View)模式、源-監(jiān)聽器(Source/Listener)模式或從屬者(Dependents)模式。

?

觀察者模式定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽某一個(gè)主題對(duì)象。這個(gè)主題對(duì)象在狀態(tài)上發(fā)生變化時(shí),會(huì)通知所有觀察者對(duì)象,使它們能夠自動(dòng)更新自己。

?

一個(gè)軟件系統(tǒng)常常要求在某一個(gè)對(duì)象的狀態(tài)發(fā)生變化的時(shí)候,某些其它的對(duì)象做出相應(yīng)的改變。做到這一點(diǎn)的設(shè)計(jì)方案有很多,但是為了使系統(tǒng)能夠易于復(fù)用,應(yīng)該選擇低耦合度的設(shè)計(jì)方案。減少對(duì)象之間的耦合有利于系統(tǒng)的復(fù)用,但是同時(shí)設(shè)計(jì)師需要使這些低耦合度的對(duì)象之間能夠維持行動(dòng)的協(xié)調(diào)一致,保證高度的協(xié)作(Collaboration)。觀察者模式是滿足這一要求的各種設(shè)計(jì)方案中最重要的一種。

二,結(jié)構(gòu)

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

抽象主題(Subject)角色 :主題角色把所有對(duì)觀察考對(duì)象的引用保存在一個(gè)聚集里,每個(gè)主題都可以有任何數(shù)量的觀察者。抽象主題提供一個(gè)接口,可以增加和刪除觀察者對(duì)象,主題角色又叫做抽象被觀察者(Observable)角色,一般用一個(gè)抽象類或者一個(gè)接口實(shí)現(xiàn)。

抽象觀察者(Observer)角色 :為所有的具體觀察者定義一個(gè)接口,在得到主題的通知時(shí)更新自己。這個(gè)接口叫做更新接口。抽象觀察者角色一般用一個(gè)抽象類或者一個(gè)接口實(shí)現(xiàn)。在這個(gè)示意性的實(shí)現(xiàn)中,更新接口只包含一個(gè)方法(即Update()方法),這個(gè)方法叫做更新方法。

具體主題(ConcreteSubject)角色 :將有關(guān)狀態(tài)存入具體現(xiàn)察者對(duì)象;在具體主題的內(nèi)部狀態(tài)改變時(shí),給所有登記過的觀察者發(fā)出通知。具體主題角色又叫做具體被觀察者角色(Concrete Observable)。具體主題角色通常用一個(gè)具體子類實(shí)現(xiàn)。

具體觀察者(ConcreteObserver)角色 :存儲(chǔ)與主題的狀態(tài)自恰的狀態(tài)。具體現(xiàn)察者角色實(shí)現(xiàn)抽象觀察者角色所要求的更新接口,以便使本身的狀態(tài)與主題的狀態(tài)相協(xié)調(diào)。如果需要,具體現(xiàn)察者角色可以保存一個(gè)指向具體主題對(duì)象的引用。具體觀察者角色通常用一個(gè)具體子類實(shí)現(xiàn)。

三,示例代碼

?

    import java.util.ArrayList;

/**
 * 抽象主題
 * @author Salmon
 *
 */
public abstract class Subject {
	private ArrayList<Observer> observers = new ArrayList<Observer>();

	public void attach(Observer observer) {
		observers.add(observer);
	}

	public void detach(Observer observer) {
		observers.remove(observer);
	}

	public void _notify() {
		for (Observer o : observers)
			o.update();
	}
}

/**
 * 具體主題
 * @author Salmon
 *
 */
public class ConcreteSubject extends Subject {
	private String subjectState;

	public String getSubjectState() {
		return subjectState;
	}

	public void setSubjectState(String subjectState) {
		this.subjectState = subjectState;
	}
}

/**
 * 抽象觀察者
 * @author Salmon
 *
 */
public interface Observer {
	public void update();
}

/**
 * 具體觀察者
 * @author Salmon
 *
 */
public class ConcreteObserver implements Observer {
	private String name;
	private String observerState;
	private ConcreteSubject subject;

	public ConcreteSubject getSubject() {
		return subject;
	}

	public void setSubject(ConcreteSubject subject) {
		this.subject = subject;
	}

	// Constructors
	public ConcreteObserver(ConcreteSubject subject, String name) {
		this.subject = subject;
		this.name = name;
	}

	// Methods
	public void update() {
		observerState = subject.getSubjectState();
		// Console.WriteLine( "Observer {0}'s new state is {1}",
		// name, observerState );
	}
}

/**
 * 客戶代碼
 * @author Salmon
 * 
 */
public class Client {
	public static void Main(String[] args) {
		// Configure Observer structure
		ConcreteSubject s = new ConcreteSubject();
		s.attach(new ConcreteObserver(s, "1"));
		s.attach(new ConcreteObserver(s, "2"));
		s.attach(new ConcreteObserver(s, "3"));

		// Change subject and notify observers
		s.setSubjectState("ABC");
		s._notify();
	}
}
  

?

觀察者(Observer)模式


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 成人精品国产 | 大毛片 | 国产午夜高清 | 日本视频在线 | 一级毛片特级毛片免费的 | 狠狠干天天 | 精品久久一二三区 | 一区二区三区在线观看视频 | 91欧美激情一区二区三区成人 | 久久视频在线视频 | 国产一区二区三区免费观看 | 99精品视频在线观看re | 精品久久久久区二区8888 | 久久99精品国产麻豆婷婷洗澡 | 色黄视频免费观看 | 日本高清高色 | 亚洲狠狠婷婷综合久久蜜桃 | 欧美一级毛片免费播放器 | 日本在线播放一区二区 | 欧美精品久久久久久久久老牛影院 | 日本不卡一区在线 | 91视视频在线观看入口直接观看 | 一级黄色片a| 精品国产一区二区三区久久久蜜臀 | 亚洲精品美女久久久 | 天天影视综合网色综合国产 | 日韩免费一区二区 | 日韩欧美一区二区三区在线 | 国产高清在线精品一区二区三区 | 免费观看成人碰视频公开 | 亚洲精品一区二区三区精华液 | 国产一级视频 | 亚洲精品一区二区三区在线观看 | 精品一区二区三区四区五区 | 亚洲精品一 | 日韩国产精品一区二区三区 | 欧美日韩精品乱国产 | 在线色网站 | 亚洲高清一区二区三区 | 欧美第一页| 日本黄大片影院一区二区 |