设计模式的基本思想:面向接口编程是核心。
软件开发中经常会遇到一个状态的改变而相应的触发一系列的连锁事件。相对这种应用场景的实现方式也是多种多样的可以通过设置回调方法等。但是从降低耦合,缩小程序变动影响的方面考虑使用观察者模式无疑是个不错的选择。
在观察者模式中主要包括:被观察者,观察者;
被观察者:从类图中可以看到,类中有一个用来存放观察者对象的Vector容器,这个Vector容器是被观察者类的核 心,另外还有三个方法:add方法是向这个容器中添加观察者对象;remove方法是从容器中移 除观察者对象;sendNotify方法是依次调用观察者对象的对应方法。这个角色可以是接口,也可 以是抽象类或者具体的类,因为很多情况下会与其他的模式混用,所以使用抽象类的情况比较多。
观察者:观察者角色一般是一个接口,它只有一个update方法,在被观察者状态发生变化时,这个方法就会被触 发调用。
本实例的类图如下:
观察者模式是一种常用的触发机制,它形成一条触发链,依次对各个观察者的方法进行处理。但同时,这也算是观察者模式一个缺点,由于是链式触发,当观察者比较多的时候,性能问题是比较令人担忧的。并且,在链式结构中,比较容易出现循环引用的错误,造成系统假死。
java语言中,有一个接口Observer,以及它的实现类Observable。具体使用清查API
package obsever;
public interface Observer {
public void update();
}
————————————————---
package obsever;
public class Observer1 implements Observer{
@Override
public void update() {
// TODO Auto-generated method stub
System.out.println("我是Observer1,收到跟新消息");
}
}
————————————————
package obsever;
public class Observers implements Observer{
@Override
public void update() {
// TODO Auto-generated method stub
System.out.println("我是Observers收到更新数据");
}
}
——————————————————————
package obsever;
import java.util.Vector;
public class Subject {
private Vector<Observer> vector = new Vector<Observer>();
protected void Add(Observer ob) {
// TODO Auto-generated method stub
vector.add(ob);
}
protected void remove(Observer ob) {
// TODO Auto-generated method stub
vector.remove(ob);
}
public void sendnotify() {
// TODO Auto-generated method stub
for(Observer a : vector){
a.update();
}
}
}