觀察者模式

觀察者模式——在對象之間定義一對多的依賴,這樣一來,當一個對象改變狀態,依賴它的對象都會收到通知,並自動更新

菜鳥教程

package pattern;

import java.util.ArrayList;
import java.util.List;

//	測試

public class Observer {
	public static void main(String[] args) {
		Weixin wTest = new Weixin();
		UserA aa = new UserA();
		UserB bb = new UserB();
		UserC cc = new UserC();
		
		wTest.register(aa);
		wTest.register(bb);
		wTest.setContent("1");
		System.out.println("-----------");
		wTest.remove(aa);
		wTest.setContent("1");
		System.out.println("-----------");
		wTest.register(cc);
		wTest.setContent("1");
	}
}


//	步驟 1
//	創建 Subject 類。
//	Subject.java
class Weixin{
	private List<User> observes = new ArrayList<>();
	private String content;
	
	public void setContent(String content){
		this.content = content;
		notifyAllObserves();
	}
	
	private void notifyAllObserves() {
		for (User t : observes){
			t.update();
		}
	}

	public String getContent(){
		return content;
	}
	
	public void register(User user){
		observes.add(user);
	}
	
	public void remove(User user){
		int n = observes.indexOf(user);
		for (int i=0; i<=n; i++){
			observes.remove(i);
		}
	}
}

//	步驟 2
//	創建 Observer 類。
//	Observer.java

//	我覺得用接口比較好, 而且書上是用接口的
interface User{
	void update();
}


//	步驟 3
//	創建實體觀察者類。
//	BinaryObserver.java
class UserA implements User{
	public void update() {
		System.out.println("AAA");
	}
	
}

class UserB implements User{
	public void update() {
		System.out.println("BBB");
	}
	
}

class UserC implements User{
	public void update() {
		System.out.println("CCC");
	}
	
}


發佈了29 篇原創文章 · 獲贊 0 · 訪問量 4539
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章