设计模式:观察者模式

本文深入讲解观察者模式,包括其定义、实现原理及应用案例。通过具体的Java代码示例,展示了如何定义观察者与被观察者,以及在天气变化场景中如何通知多个观察者进行响应。同时,探讨了观察者模式的优点、缺点及其在实际开发中的广泛应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义

定义一个被观察者,多个观察者,一旦被观察者发生变化,会通知各个观察者。

1、定义观察者

public abstract class WeatherOberver{
      public abstract void rain();
      public abstarct void sun();
}

2、定义被观察者

public class WeatherObervable extends WeatherOberver{
    ArrayList arrayList =new ArrayList<WeatherOberver>();
    
    public void add(WeatherOberver ob){
         arrayList.add(ob)
    }

  public void remove(WeatherOberver ob){
      if(arrayList.contains(ob)){
          arrayList.remove(ob);
      }
  }
  @Override
 public void sun() {
     for (WeatherOberver observerListener : list) {
         observerListener.sun();
     }
 }

 @Override
 public void rain() {
     for (WeatherOberver observerListener : list) {
         observerListener.rain();
     }
 }
}

3.调用

private WeatherOberver xiaoDong = new WeatherOberver() {
        @Override
        public void typhoon() {
            Log.d("xiaoDong","吹台风,要放假了。哈哈!");
        }

        @Override
        public void sun() {

        }

        @Override
        public void rain() {
            Log.d("xiaoDong","下雨了,带伞");
        }
    };

    private WeatherOberver xiaoMing = new WeatherOberver() {

        @Override
        public void sun() {
            
        }

        @Override
        public void rain() {
            Log.d("xiaoMing","下雨了,带伞");
        }
    };
WeatherObervable weatherObervable = new WeatherObervable();
weatherObervable.add(xiaoMing);
weatherObervable.add(xiaoDong);
weatherObervable.rain();

观察者模式小结

观察者模式就是将观察者和被观察者彻底隔离,实现解耦,只依赖于我们定义的抽象。观察者模式运用十分广泛,比如我们的ListView运用了观察者模式和Adapter是的Listview的可扩展性,灵活性非常强。还有比较出名的开源库EventBus也是用了观察者模式的思想实现解耦。

总结

优点:1、观察者和被观察者解耦 2、增强灵活性,解耦
缺点:由于java代码的顺序执行,要考虑被察者的执行效率,多个观察者需要及时响应就得考虑异步的问题了。
观察模式核心:一个list合集,提供add,remove方法,遍历观察者,就是一个list的遍历。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值