Observer观察者模式

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

 

 

角色分析:

  抽象目标角色(Subject):

      目标角色提供观察者注册、删除接口,并发出通知。

  抽象观察者角色(IObserver):

      当目标角色发生改变时,获得通知的对象的一个更新接口。

 

实现:

  

package observer;
/**
 *create by datao.wang 2014-2-8-下午2:45:04	
 *目标对象
 */
public interface ISubject {
  
	public abstract void notifyObserver();
}

package observer;

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

/**
 *create by datao.wang 2014-2-8-下午2:50:48	
 */
public class Subject implements ISubject {
    List<IObserver> list=new ArrayList<IObserver>();
    
	@Override
	public void notifyObserver() {
		for(IObserver ob:list){
			ob.update();
		}
	}

	public void addObserver(IObserver o){
		list.add(o);
	}
	
	public void dosomething(){
		System.out.println("我要跟新了");
		//通知更新
		notifyObserver();
	}
}




package observer;
/**
 *create by datao.wang 2014-2-8-下午2:41:04	
 *抽象观察者
 */
public interface IObserver {
    public void update();
}

package observer;
/**
 *create by datao.wang 2014-2-8-下午2:42:33	
 *观察者1号
 */
public class Observer1 implements IObserver {

	@Override
	public void update() {
		System.out.println("发生改变....");
	}

}

package observer;
/**
 *create by datao.wang 2014-2-8-下午2:42:59	
 *观察者2号
 */
public class Observer2 implements IObserver {

	@Override
	public void update() {
		System.out.println("发生改变.....");
	}

}

package observer;
/**
 *create by datao.wang 2014-2-8-下午2:58:00	
 *客户端调用
 */
public class Client {
	public static void main(String[] args) {
		Subject subject=new Subject();
		Observer1 s1=new Observer1();
		Observer2 s2=new Observer2();
		subject.addObserver(s1);
		subject.addObserver(s2);
		subject.dosomething();
	}
}

 

应用场景:

    1、当一个对象的改变必须通知其他对象的时候,可采用观察者模式。

 

 

优点:

  1、实现目标对象鱼观察对象的松耦合

   2、实现广播通知注册的对象

 

缺点:

   1、如果观察者众多,话费时间较多。

   2、如果误操作目标对象,可能引起一连串的状态变更。

   3、异步通知,注意多线程操作。

 

 

你可能感兴趣的:(observer)