观察者模式(订阅发布模式)及实例Demo

1、观察者模式,又称订阅发布模式,其架构如下:

2、实例demo——订阅天气,发布天气

1>WeatherSubject  目标类

public class WeatherSubject {

 

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

  

   public void attach(Observer observer){

     observers.add(observer);

   }

  

   public void detach(Observer observer){

     observers.remove(observer);

   }

  

   protected void notifyObservers(){

     for(Observer observer : observers){

        observer.update(this);

     }

   }

  

}

2> 具体的目标类

public class ConcreteWeatherSubject extends WeatherSubject {

 

   private String weatherContent;

 

   public String getWeatherContent() {

     return weatherContent;

   }

 

   public void setWeatherContent(String weatherContent) {

     this.weatherContent = weatherContent;

     this.notifyObservers();

   }

 

 

}

 

3> 观察者

public interface Observer {

  

   public void update(WeatherSubject subject);

  

}

 

4> 具体的观察者

public class ConcreteObserver implements Observer {

 

   private String observerName;

   private String weatherContent;

   private String remindThing;

  

   @Override

   public void update(WeatherSubject subject) {

     weatherContent = ((ConcreteWeatherSubject)subject).getWeatherContent();

     System.out.println(observerName + "收到了" + weatherContent + " ," + remindThing);

   }

 

   public String getObserverName() {

     return observerName;

   }

 

   public void setObserverName(String observerName) {

     this.observerName = observerName;

   }

 

   public String getWeatherContent() {

     return weatherContent;

   }

 

   public void setWeatherContent(String weatherContent) {

     this.weatherContent = weatherContent;

   }

 

   public String getRemindThing() {

     return remindThing;

   }

 

   public void setRemindThing(String remindThing) {

     this.remindThing = remindThing;

   }

  

  

 

}

5> test 类

public class test {

 

   public static void main(String[] args) {

     //1.创建目标

     ConcreteWeatherSubject weather = new ConcreteWeatherSubject();

  

     //2.创建观察者

     ConcreteObserver observerGirl = new ConcreteObserver();

     observerGirl.setObserverName("girl");

     observerGirl.setRemindThing("go shopping");

    

     ConcreteObserver observerBoy = new ConcreteObserver();

     observerBoy.setObserverName("boy");

     observerBoy.setRemindThing("play football");

    

     //3.注册观察者

     weather.attach(observerGirl);

     weather.attach(observerBoy);

    

     //4.目标发布天气

     weather.setWeatherContent("a nice day!");

   }

 

}

 

测试结果:

girl收到了a nice day! ,go shopping
boy收到了a nice day! ,play football
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值