8. 设计模式 观察者

落花浮王杯 提交于 2020-02-15 08:33:53

模式的定义与特点

观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。

观察者模式是一种对象行为型模式,其主要优点如下。

  1. 降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。
  2. 目标与观察者之间建立了一套触发机制。


它的主要缺点如下。

  1. 目标与观察者之间的依赖关系并没有完全解除,而且有可能出现循环引用。
  2. 当观察者对象很多时,通知的发布会花费很多时间,影响程序的效率。

 

原文链接

http://www.javaxmw.com/info?intId=30

 

public class ObserverTest {
   public static void main(String[] args) {
      SubjectM subject = new ConcreateSubject();
      Observer observer1 = new ConcreteObserver1();
      Observer observer2 = new ConcreteObserver2();
      subject.add(observer1);
      subject.add(observer2);
      subject.notifyObserver();
   }
}

interface Observer
{
   void response();//反应
}

class ConcreteObserver1 implements Observer
{
   @Override
   public void response() {
        System.out.println("具体观察者1作出反应!");
   }
}


class ConcreteObserver2 implements Observer
{
   @Override
   public void response() {
        System.out.println("具体观察者2作出反应!");
   }
}


abstract class SubjectM
{
  protected List observers = new ArrayList();  
  
  public void add(Observer observer) {
     observers.add(observer);
  }
  
  public void remove(Observer observer) {
     observers.remove(observer);
  }
  
  public abstract void notifyObserver();
}

class ConcreateSubject extends SubjectM {

   @Override
   public void notifyObserver() {
      System.out.println("具体目标发生变化");
        System.out.println("--------------");       
        for (Object obs:observers) {
           ((Observer)obs).response();
        }
   }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!