Observer


監聽器就是在事件之前再加上一段代碼,爲了降低耦合,寫成另一個類*(監聽類),並把當前的對象傳遞給這個類,爲了再降低監聽類的參數的耦合,需要把傳入的參數再封裝一下,封裝成even。



運行程序的main代碼

package com.Demo;

public class Demo {
	public static void main(String[] args) {
		Person p = new Person();
		p.registerListener(new PersonListener() {
			
			@Override
			public void doRun(Even e) {
				System.out.println(e.getP().getClass() + " is running");
			}

			@Override
			public void doEat(Even e) {
				System.out.println(e.getP().getClass() + " is eatting");
			}
		});
		p.run();
		p.eat();
	}
}

運行結果:

class com.Demo.Person is running
run........
class com.Demo.Person is eatting
eat........


Person代碼:

package com.Demo;

class Person {
	private PersonListener listener;

	public void run() {
		if (listener != null) {
			listener.doRun(new Even(this));
		}
		System.out.println("run........");
	}

	public void eat() {
		if (listener != null) {
			listener.doEat(new Even(this));
		}
		System.out.println("eat........");
	}

	// 註冊監聽器
	public void registerListener(PersonListener listener) {
		this.listener = listener;
	}
}

監聽器接口

package com.Demo;

interface PersonListener {
	
	public void doRun(Even e);

	public void doEat(Even e);
}

參數even:

package com.Demo;

class Even {
	private Person p;

	public Even(Person p) {
		this.p = p;
	}

	public Person getP() {
		return p;
	}

	public void setP(Person p) {
		this.p = p;
	}
}



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