设计模式-Observe

观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知并被自动更新。

观察者模式的参与者:

1、Subject(目标),目标知道它的观察者。可以有任意多个观察者观察同一个目标。提供注册和删除观察者的接口。

2、Observer(观察者),为那些在目标发生改变时获得通知的对象定义一个接口。

3、ConcreteSubject(具体目标),将有关状态存入各具体目标,在具体目标的内部状态改变时,给所有登记过的观察者发出通知。

4、ConcreteObserve(具体观察者),维护一个指向ConcreteSubject对象的引用。储存有关状态,这些状态与目标的状态保持一致。



简单实现如下:

1、Subject,代码如下:

public interface Subject {
	public void register(Object object);
	public void remove(Object object);
	public void notifyObserve();
	public void setMeeting(String meeting);
}
2、ConcreteSubject,代码如下:

public class ConcreteSubject implements Subject {
	private List<Object> list = new ArrayList<Object>();
	private String meeting;
	
	@override
	public void register(Object object) {
		list.add(object);
	}
	
	@override
	public void remove(Object object) {
		list.remove(object);
	}
	
	@override
	public void notifyObserver() {
		for(Object object : list) {
			Observe observe = (Observe) object;
			observe.update(meeting);
		}
	}
	
	@override
	public void setMeeting(String meeting) {
		this.meeting = meeting;
		notifyObserver();
	}
	
}

3、Observe,代码如下:

public interface Observer {
	public void update(String info);
}

4、ConcreteObserver,代码如下:

public class ObserverA implements Observer {
	
	@override
	public void update(String info) {
		//收到通知后,ObserverA  doSomething
		System.out.println("ObserverA do something");
	}
	
}

public class ObserverB implements Observer {
	
	@override
	public void update(String info) {
		//收到通知后,ObserverB  doSomething
		System.out.println("ObserverB do something");
	}
	
}

5、客户端代码如下:

public static void main(String[] args) {
	Subject subject = new ConcreteSubject();
	Observer observerA = new ObserverA();
	Observer observerB = new ObserverB();
	subject.register(observerA);
	subject.register(observerB);
	subject.setMeeting("there have a change");
}

转载地址: http://blog.csdn.net/seablue_xj/article/details/5490563





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值