zoukankan      html  css  js  c++  java
  • 《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

  • 相关阅读:
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
    LeetCode OJ
  • 原文地址:https://www.cnblogs.com/stone94/p/12906374.html
Copyright © 2011-2022 走看看