设计模式二:观察者模式

设计者模式二:观察者模式

设计原则:为了交互对象之间的松耦合设计而努力。

  

定义:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

深化:(松耦合的威力) 当两个对象之间松耦合,对象之间依然可以交互,但是不太清楚彼此的细节,观察者模式提供一种对象设计,让主题和观察者之间松耦合。

   关于观察者的一切,主题值知道观察者实现了某个接口,主题不需要知道观察者的具体类是谁,做了些什么或其他任何细节。

任何时候我们都可以用新的观察者取代现有的观察者,主题不会受到影响。加入观察者要求也就是实现指定接口即可。

 

 

 

解释:对于一对多的关系有何关联

  利用观察者模式,主题是具有状态的对象,并且可以控制这些状态,观察者课使用这些状态,依赖主题来告诉他们状态何时改变。

实际问题:

气象监测应用:

气象站提供WeathData对象负责追中目前的天气状况(包括几个温度的参数),

建立一个应用,有三种布告板,分别显示目前的状况,气象统计...要求:当WeatherObject对象获得最新的测试数据时,三种布告板必须实事更新。

做法1

Weather中加入代码:获取到温度参数,创建布告板的对象,然后直接调用布告板对象的update方法

问题:

1. 这是针对具体实现的编程,而非针对接口的编程

2. 对于每一个新的布告板,我们都得修改代码

3. 我们无法在运行时动态的增加或删除布告板

做法2:创建两个接口另加一个显示的接口

      1.Subject接口被称为主题接口,对象使用此接口注册为观察者,或者把自己从观察者中删除,需要的方法:RegisterObserver();removeObserver();notifyObservers();

      实现类。加入参数包括传给观察者的信息,如温度;还有一个List集合用来存储着观察者,在类的构造函数中new ArrayLIst();

      可以加入getXX的方法,可以用于观察着自定义获取到的内容,

  measurementsChanged()这个方法中调用notifyObservers();

  在一个方法setMeasurementsx。。。)这个方法是提供修改信息的,然后下面调用measurementsChanged()方法

 

      2.Observer接口:所有潜在的观察者必须实现这个接口,这个接口只有update()方法,当主题状态变化时调用它

      可选3.三个布告板都需要显示的功能,定义一个显示的接口

继承类中需要有一个主题的属性weatherData,用于自动设置加入观察者的对于中,在构造方法中设置this.WeatherData=weatherDataweatherData.registerObserver(this)

同时重写update方法,方法的参数可以是具体的参数,或者是一个WeatherData对象,这样可以随便设置获取到的值。  

问题1:没有设置,观察者主动去获取数据,每次都是观测者发送数据,但是观察者此时可能有更重要的事情要处理。

问题2:有的观察者每次只需要一点点数据,但是这种做法每次都是推送全部的信息过来,迫使观察者接受,同时以后观测者决定扩展功能,新增更多的状态,就需要修改和更新对每位观察者的调用,  希望在观测者提供get方法由观察者调用

做法3java内置的观察者模式   解决上述问题

http://blog.csdn.net/a19881029/article/details/8975962

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值