设计模式--观察者模式

2018-08-08  本文已影响0人  jack_520

ps:文章来自www.cnblogs.com/fingerboy/p/5468994.html

观察者模式又称发布/订阅模式。 观察者模式定义了对象之间一对多的依赖关系,这样,当“一”的一方状态发生改变时,它所依赖的“多”的一方都会收到通知并自动更新。

这里以老师学生为例:

//主题接口

interface Subject{

//添加观察者

 void addObserver(Observer obj);

//删除观察者

 void deleteObserver(Observer obj);

//当主题状态改变时,这个方法被调用,通知所有观察者

void notifyObserver();

}

//Observer接口(观察者)

interface Observer{

//当主题状态改变时,会将一个String类型传入改方法,每个观察者都需要实现这个方法

public void update(String info);

}

//老师

public class TeacherSubject implements Subject{

    private List<Observer> observerList = new ArrayList<Observer>();

   //记录状态的字符串

    private String info;

    public void addObserver(Observer obj){

observerList.add(obj);

   }

    public void deleteObserver(Observer obj){

      if(observerList.contains(obj))  observerList.remove(obj);

   }

  public void notifyObserver(){

     for(Observer observer: observerList){

         observer.update(info);

     }

  }

//布置作业方法

public void setHomework(String info){

 this.info = info;

System.out.println("今日作业----"+info);

this.notifyObserver();

}

}

//学生

public class StudentObserver implements Obsesrver{

 //保存一个Subject的引用,方便取消订阅使用

private Subject subject;

private String name;

//构造器用来注册观察者

public StudentObserver(String name,Subject subject){

 this.name = name;

this. subject = subject;

//新建学生时,默认让他从老师那里订阅。

subject.addObserver(this);

}

public void update(String info){

System.out.println(name+"----得到作业"+info);

}

}

//测试类

public class Test{

  public static void main(String[] args){

Subject teacher = new TeacherSubject();

Observer zhang = new StudentObserver("张",teacher);

Observer wang = new StudentObserver("王",teacher);

Observer li = new StudentObserver("李",teacher);

teacher.setHomeWork("背诵课文");

teacher.setHomeWork("背诵乘法口诀");

teacher.setHomeWork("抄写单词");

//输出 今日作业--背诵课文

//张----得到作业背诵课文

//王----得到作业背诵课文

//李----得到作业背诵课文

// 今日作业--背诵乘法口诀

//。。。。。。。。

}

}

java 内置了观察者模式 在java.util包包含了Observer与Observerable.功能类似Subject与Observer接口

观察者模式好处:

观察者模式提供了一种对象设计,让主题与观察者之间耦合度降低,因为关于观察者的一切,只要指定观察者实现了Observer接口,并不关心观察者具体的类型是谁,有什么功能等其它细节。

上一篇 下一篇

猜你喜欢

热点阅读