现在的位置: 首页 > 综合 > 正文

Java–设计模式之观察者模式

2013年01月27日 ⁄ 综合 ⁄ 共 2152字 ⁄ 字号 评论关闭

三个接口,一个被观察者,三个观察者,一个场景类

故事部分虚构

三个接口:

1.Observer.java(观察者接口)

2.Observerable.java(被观察者接口)

3.IHanFeiZi.java(韩非子的接口)

一个被观察者:

1.HanFeiZi.java(实现Observerable.java和IHanFeiZi.java两个接口)

三个观察者,都实现Observer.java接口:

1.LiSi.java(李斯)

2.DiaoSi.java(屌丝)

3.HanFeiZiWife.java(韩非子的妻子)

一个场景类:

1.Client.java

三个接口的代码如下:

Observer.java

public interface Observer {

	public void update(String context);
	
}

Observerable.java

public interface Observerable {
	
	public void addObserver(Observer observer);
	
	public void deleteObserver(Observer observer);
	
	public void notifyObservers(String context);
	
}

IHanFeiZi.java

public interface IHanFeiZi {
	
	public void haveBreakfast();
	
	public void haveFun();
}

被观察者代码如下:

HanFeiZi.java

import java.util.ArrayList;


public class HanFeiZi implements IHanFeiZi, Observerable{

	private ArrayList<Observer> observerList = new ArrayList<Observer>();
	
	@Override
	public void haveBreakfast() {
		System.out.println("韩非子:正在吃饭");
		notifyObservers("韩非子正在吃饭");
	}

	@Override
	public void haveFun() {
		System.out.println("韩非子:正在娱乐");
		notifyObservers("韩非子正在娱乐");
	}

	@Override
	public void addObserver(Observer observer) {
		observerList.add(observer);
	}

	@Override
	public void deleteObserver(Observer observer) {
		observerList.remove(observer);
	}

	@Override
	public void notifyObservers(String context) {
		for(Observer observer : observerList){
			observer.update(context);
		}
	}
}

三个观察者代码如下:

LiSi.java

public class LiSi implements Observer{

	@Override
	public void update(String context) {
		System.out.println("李斯:发现韩非子有活动");
		reportToQinShiHuang(context);
		System.out.println("报告完毕");
	}

	private void reportToQinShiHuang(String context) {
		System.out.println("李斯:报告老大,发现韩非子有活动" + "<--->" + context);
	}

}

DiaoSi.java

public class DiaoSi implements Observer{

	@Override
	public void update(String context) {
		System.out.println("屌丝:发现韩非子有活动" + "<--->" + context);
		System.out.println("屌丝非常伤心");
	}
}

HanFeiZiWife.java

public class HanFeiZiWife implements Observer{

	@Override
	public void update(String context) {
		System.out.println("韩非子妻子:这死鬼竟然在吃喝玩乐");
	}
}

场景类代码如下:

Client.java

public class Client {
	
	public static void main(String[] args) {
		HanFeiZi hanFeiZi = new HanFeiZi();
		LiSi liSi = new LiSi();
		DiaoSi diaoSi = new DiaoSi();
		HanFeiZiWife hanFeiZiWife = new HanFeiZiWife();
		hanFeiZi.addObserver(liSi);
		hanFeiZi.addObserver(diaoSi);
		hanFeiZi.addObserver(hanFeiZiWife);
		hanFeiZi.haveBreakfast();
		hanFeiZi.haveFun();
	}
}

抱歉!评论已关闭.