《Head first 》设计模式之二 观察者模式

9 篇文章 0 订阅
7 篇文章 0 订阅

设计的原则

1:把不变和变动的部分分开设计

2:面向接口编程,不面向实现编程

3:多用组合,少用继承

昨天晚上学习了观察者模式,观察者模式的定义:定义了一种一对多的依赖,当一个对象状态发生改变,所有依赖它的对象都会得到通知,并自动更新

文中用到的例子是气象站,很多气象网站或者是机场,客运中心,农场都对气象数据感兴趣,他们会依赖气象站发布的数据,那么频繁地访问气象站数据,不如让气象站通知机场,客运中心,农场。这样也可以预防突发的气象灾害,比如夏天的雷暴、龙卷风等突发天气。

JDK中有默认实现的观察者模式,Observable,和Observer两个对象,不过非常不推荐使用原生的观察者模式,因为默认的观察者是一个抽象类,需要使用集成,而不是我们推荐的接口实现,第二个原因是,JDK的被观察者通知观察者的顺序跟添加观察者的顺序无关,依赖添加顺序的需要特别注意。

观察者模式获取状态信息有两种方式,1:push。2:get

push方式会把状态对象主动传递给观察者,get方式观察者会主动调用被观察者的引用get自己关注的信息,不过容易让观察者过度暴露给观察者。

 

pubic interface Observable{
setChanged();
addListener(Listener listener);
removeListener(Listener listener);
fireListener();//get方式
fireListener(Obeject obj);//push方式
}

 

public interface Observer{
addListener();
update();//get方式
update(Object obj);//push方式
remove();
}


具体实现不在赘述,因为观察者模式大家都不陌生,Jframe中的控件大量使用了观察者模式,MVC开发模式中也大量使用了观察者模式。重要的还是我们开头说的三个开发原则。

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值