《Head First 设计模式》 第二、三章 观察者模式、装饰者模式

原则

模式

实践

关联

观察者模式

原则

为交互对象之间的松耦合设计而努力

模式

观察者模式

在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会受到通知,并自动更新


图 6-11 观察者模式的结构图

Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。

ConcreteSubject:具体主题(具体被观察者),该角色将有关状态存入具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发送通知。

Observer:抽象观察者,是观察者者的抽象类,它定义了一个更新接口,使得在得到主题更改通知时更新自己。

ConcrereObserver:具体观察者,实现抽象观察者定义的更新接口,以便在得到主题更改通知时更新自身的状态。

图及说明来源于:

https://blog.csdn.net/itachi85/article/details/50773358

实践

书中的实例,看了这张图,就能回想起观察者模式的实际应用方式

图片来源于《Head First 设计模式》 第 56 页

关联

哪里用到了观察者模式?

什么是ApplicationContext? 

它是Spring的核心,Context我们通常解释为上下文环境,但是理解成容器会更好些。 

ApplicationContext则是应用的容器。

Spring把Bean(object)放在容器中,需要用就通过get方法取出来。

ApplicationEvent 是个抽象类,里面只有一个构造函数和一个长整型的timestamp。

ApplicationListener 是一个接口,里面只有一个onApplicationEvent方法。

所以自己的类在实现该接口的时候,要实装该方法。

如果在上下文中部署一个实现了ApplicationListener接口的bean,那么每当在一个ApplicationEvent发布到 ApplicationContext时,这个bean得到通知。

其实这就是标准的Oberver设计模式。

来源于:

https://www.cnblogs.com/softidea/p/5716870.html 

不错的博客

https://blog.csdn.net/itachi85/article/details/50773358

装饰者模式

原则

对扩展开放,对修改关闭

模式

装饰者模式

动态地将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择


这里写图片描述

Component:抽象组件,给对象动态的添加职责。

ConcreteComponent:组件具体实现类。

Decorator:抽象装饰者,继承Component,从外类来拓展Component类的功能,但对于Component来说无需知道Decorator的存在。

ConcreteDecorator:装饰者具体实现类。

图及说明来源于:

https://blog.csdn.net/itachi85/article/details/51282647

实践

书中的实例,看了这张图,就能回想起装饰者模式的实际应用方式

图片来源于《Head First 设计模式》 第 92 页

关联

哪里用到了装饰者模式?

Java 中的 java.io 类就是使用了装饰者模式

不错的博客

https://blog.csdn.net/itachi85/article/details/51282647

猜你喜欢

转载自www.cnblogs.com/stone94/p/12906374.html