您的位置:首页 > 编程语言 > Java开发

JAVA设计模式(九)——观察者模式

2015-01-13 13:37 330 查看

1、观察者模式

        观察者(Observer)模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。Observer模式提供给关联对象一种同步通信的手段,使得莫哥对象与依赖它的其他对象之间保持状态同步。

2、结构与角色

      老规矩,我们先看看观察者模式的结构示意图示,如下:



        在这里,我们看到四个角色,而实际上归类起来,观察者模式只有两个对象,一个是观察者,一个是被观察者。但是在我们的设计模式当中,进行了封装和抽象等可扩展的操作,所以上面两个角色对象又被细分为四种对象,如下:

        抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。(Subject)

        抽象观察者角色:为所有具体的观察者定义一个接口,在得到主题的通知时更新自己。(Observer)

        具体主题角色:在具体主题内部状态改变时,给所有登记过的观察者发出通知。具体主题角色通常用一个子类实现。(ConcreteSubject)

        具体观察者角色:该角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。通常用一个子类实现。如果需要,具体观察者角色可以保存一个指向具体主题角色的引用。(ConcreteObserver)

3、代码示例

       观察者模式的代码比较简单,只有一个具体的主题和具体的观察者,如下:

import java.util.Observable;

public class Person extends Observable {

private String name ;
private String sex ;
private int age ;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
this.setChanged();
this.notifyObservers();
}

public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
this.setChanged();
this.notifyObservers();
}

public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
this.notifyObservers();
this.setChanged();
}
}


        观察者如下:
import java.util.Observable;
import java.util.Observer;

public class MyObserver implements Observer{

public void update(Observable observable,Object object){
System.out.println("对象发生变化。。。。。。。");
}

}


       测试如下:
public class MainClass {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Person person = new Person();
//注册观察者
// 侦听事件驱动程序设计中的外部事件
// 侦听某个对象的状态变化
// 新的产品出现,消息通知,邮件列表中的订阅者
person.addObserver(new MyObserver());
person.setName("张三");
}

}

4、总结分析

        分析,虽然上面我们只有两个类,但实际上,观察者模式还是四个对象,我们这里使用了Java的jdk,它帮我们写好了接口信息,我们直接使用就行了,读者要区分对待。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式 可扩展