设计模式--->观察者模式

   观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。
 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

import java.util.Vector;
public abstract class Subject {
 private Vector<Observer> vector = new Vector<Observer>();
 public void addObservers(Observer observer){
  this.vector.add(observer);
 }
 
 public void deleteObserver(Observer observer){
  this.vector.remove(observer);
 }
 
 protected void notifyObserver(){  
        for(Observer observer: vector){  
         observer.update();  
        }  
    } 
 
 public abstract void doSomething();
 
}

 

package com.test.observer;
public class ModifySubject extends Subject {
 @Override
 public void doSomething() {
  // TODO Auto-generated method stub
  System.out.println("被观察者发生改变");
  this.notifyObserver();
 }
}
papackage com.test.observer;
public interface Observer {
 public void update();
}
package com.test.observer;
public class Observer1 implements Observer {
 @Override
 public void update() {
  // TODO Auto-generated method stub
  System.out.println( "Observer1收到消息");
 }
}
package com.test.observer;
public class Observer2 implements Observer {
 @Override
 public void update() {
  // TODO Auto-generated method stub
  System.out.println( "Observer2收到消息");
 }
}
package com.test.observer;
public class Client {
 public static void main(String[] args) {
  Subject subject = new ModifySubject();
  subject.addObservers(new Observer1());
  subject.addObservers(new Observer2());
  subject.doSomething();
 }
}

结果:

被观察者发生改变
Observer1收到消息
Observer2收到消息

观察者模式的优点

        观察者与被观察者之间是属于轻度的关联关系,并且是抽象耦合的,这样,对于两者来说都比较容易进行扩展。

        观察者模式是一种常用的触发机制,它形成一条触发链,依次对各个观察者的方法进行处理。但同时,这也算是观察者模式一个缺点,由于是链式触发,当观察者比较多的时候,性能问题是比较令人担忧的。并且,在链式结构中,比较容易出现循环引用的错误,造成系统假死。

 参考:

http://blog.csdn.net/zhengzhb/article/category/926691/

http://www.cnblogs.com/java-my-life/archive/2012/05/16/2502279.html

当然JDK里面也自带了接口Observer,以及它的实现类Observable. 我们可以通过调用Java源码实现观察者模式! 

 

你可能感兴趣的:(java,设计模式)