浅谈设计模式之观察者模式

观察者模式是一种用途很大的设计模式,可以将主动查询转为被动等待,即“你不要call我,有事我会call你”,这样可以大大减少交互的次数。观察者模式中有两个角色,观察者(Observer)和被观察者(Subject,也称为主题),观察者可以决定要不要订阅主题,如果订阅了,主题会在自身发生变化的时候通知这些关心的观察者;如果你不关心这个主题了,也可以把自己从列表移除,观察者模式的主要代码如下,对于主题的实现(已省略Subject的interface):

   public class ConcreteSubject implement Subject{

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

   public void registerObserver(Observer observer){

        if(!observerList.contains(observer)){

             observerList.add(observer);

    }

}

  public  void removeObserver(Observer observer){

          int i = observerList.indexof(observer);

          if(i >= 0){

                observerList.remove(observer);

               }

          }

}

  public  void onDataChange(){

observerList.foreach(Observer::update())

}

 

对于观察者Observer的实现(已省略interface),其结构如下:

public class ConcreteObserver implement Observer{

  Subject subject;

  public Observer(Subject subject1){

    this.subject = subject1;

    subject.registerObserver(this);

}

public void update(){

//do something

}

}

 

在现实生活中,观察者模式更加灵活,在spring中有@Autowire方法,可以自动注入所有实现了Observer接口的类,这样就能省略registerObserver方法。update方法也可以增加入参,来携带需要传递的信息,比如根据入参type来决定是add、update还是reload。

 


版权声明:本文为zhq931218原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。