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

观察者模式是一种用途很大的设计模式,可以将主动查询转为被动等待,即“你不要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。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值