设计模式--观察者模式

-----------------------------观察者模式(Observer)--------------------------------

(1)

基本概念:

观察者模式属于行为型模式,其意图是定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

这一个模式的关键对象是目标(Subject)和观察者(Observer)。一个目标可以有任意数目的依赖它的观察者,一旦目标的状态发生改变,所有的观察者都得到通知,作为对这个通知的响应,每个观察者都将查询目标以使其状态与目标的状态同步。

适用场景:

观察者模式,用于存在一对多依赖关系的对象间,当被依赖者变化时,通知依赖者全部进行更新。因此,被依赖者,应该有添加/删除依赖者的方法,且可以将添加的依赖者放到一个容器中;且有一个方法去通知依赖者进行更新。

(2)

思想:

(一)

建立目标(subject)与观察者(observer)接口:

目标(subject)接口:

建立一个注册观察者对象的接口; public void attach(Observer o);

建立一个删除观察者对象的接口; public void detach(Observer o);

建立一个当目标状态发生改变时,发布通知给观察者对象的接口; public void notice();

观察者(observer)接口:

建立一个当收到目标通知后的更新接口: public void update();

(3)

实例:

老师又电话号码,学生需要知道老师的电话号码以便于在合时的时候拨打,在这样的组合中,老师就是一个被观察者

(Subject),学生就是需要知道信息的观察者,当老师的电话号码发生改变时,学生得到通知,并更新相应的电话记

录。

具体实例如下:

Subject代码:

public interface Subject{

    public void attach(Observero);

    public void detach(Observero);

    public void notice();

}

Observer代码:

public interface Observer{

    public void update();

}

Teacher代码;

import java.util.Vector;

public class Teacher implements Subject{

    private String phone;

    private Vectorstudents;

    publicTeacher(){

       phone ="";

       students =new Vector();

    }

    public  void attach(Observer o){

      students.add(o);

    }

    public voiddetach(Observer o){

      students.remove(o);

    }

    public voidnotice(){

       for(inti=0;i<students.size();i++)

          ((Observer)students.get(i)).update();

    }

    public voidsetPhone(String phone){

       this.phone =phone;

      notice();    --关键

    }

    public StringgetPhone(){

       returnphone;

    }

}

Student代码

public class Student implements Observer{

    private Stringname;

    private Stringphone;

    private Teacherteacher;

    publicStudent(String name,Teacher t){

       this.name =name;

       teacher = t;

    }

    public voidshow(){

      System.out.println("Name:"+name+"\nTeacher'sphone:"+phone);

    }

    public voidupdate(){

       phone = teacher.getPhone();

    }

}

Client代码

package observer;

import java.util.Vector;

public class Client{         -->可以只定义目标者,观察者,另外的vector,只为了输入结果.

    public staticvoid main(String[] args){

       Vectorstudents = new Vector();

       Teacher t =new Teacher();

       for(int i= 0;i<10;i++){

           Studentst = new Student("lili"+i,t);

          students.add(st);

          t.attach(st);

       }

      t.setPhone("88803807");

       for(inti=0;i<10;i++)

             ((Student)students.get(i)).show();

      t.setPhone("88808880");

       for(inti=0;i<10;i++)

             ((Student)students.get(i)).show();

    }

}

总结:Observer模式的最知名的应用是在MVC结构,Observer模式可以很好的应用在对事件的监听中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值