设计模式:笔试(1)Observer 观察者模式

目标(Intent):

建立在“一对多(one-to-many)”依赖关系的场景下,实现当一个对象状态发生变化时,所有依赖于这个对象的其他对象都能够自动获得通知并且自动被更新其状态。Publish-Subscribe

角色:

Subject:了解自己的观察者(Observers)。

Observer:定义update接口,该接口由Subject调用来更新Observer的状态

Java中的实现:

-  java.util.Observable
        subject.addObserver(o)
        subject.hasChanged()
        subject.notifyObservers()

和 java.util.Observer
        observer.update(o, arg)

当subject状态发生改变时,调用setChanged方法,而后调用notifyObservers方法,进而调用Observer的update方法

好处:

被观察者,只需要知道谁在观察自己就可以了,不需要了解观察者的细节

当被观察者发生变化时,只需要广播消息即可,被观察者可以有选择的的广播,决定广播事件类型等,被观察者处于主动状态

观察者可以实时了解被观察者的状态,在多线程编程中消除了消息的耦合性


import java.util.Observable;
import java.util.Observer;


public class ObserverPattern {
	public static void main(String[] args){
		ObserverPattern op = new ObserverPattern();
		op.testOb();
	}
	class ObSubject extends Observable{
		private int height = 0;
		public void setHieght(int h){
			this.height = h;
			this.setChanged();
			if(this.hasChanged()){
				this.notifyObservers(height);
			}
		}
	}
	static class ObObserver implements Observer{
		private static int count = 0;
		public void update(Observable o, Object arg) {
			System.out.println(arg+" now changed !"+ count++);
			
		}
		
	}
	public void testOb(){
		ObSubject subject = new ObSubject();
		for(int i=0;i<10;i++){
			subject.addObserver(new ObObserver());
		}
		for(int j=0;j<100;j++){
			subject.setHieght(j);
		}
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值