本文内容
前言
在 上一章 中,讲解了模板模式的原理和应用,其主要功能就是 提高代码的复用性、基于扩展点可以在不改变源码的情况下方便的扩展功能。
而我们常用的 Callback 回调技术,也能起到模板模式的两大作用,那他们有什么区别呢?
前言
在 上一章 中,讲解了模板模式的原理和应用,其主要功能就是 提高代码的复用性、基于扩展点可以在不改变源码的情况下方便的扩展功能。
而我们常用的 Callback 回调技术,也能起到模板模式的两大作用,那他们有什么区别呢?
前言
本章来讲解另一个比较常用的行为型设计模式 — 模板模式,该模式主要用来解决 复用和扩展 两个问题。
模板模式,全称是模板方法模式(Template Method Design Pattern),GoF 是如下定义的:
前言
在上一篇文章中,我们知道了 观察者模式有几种不同的实现方式:
那么本篇文章将聚焦于异步非阻塞的方式,实现一个类似 Google Guava EventBus 的通用框架,对观察者模式进行封装,让其在项目中使用更简便。
EventBus 项目地址:https://github.com/AruNi-01/DesignPattern/tree/main/dp/src/observer/eventbus
Guava 地址:https://github.com/google/guava ,直接下载 jar 包添加进自定义的目录,然后将该目录 Add as Library 即可使用,或者使用 Maven 亦可。
前言
前面我们学习完了创建型和结构型的设计模式,从这篇文章开始,将学习最后一个类型的设计模式—行为型。
创建型主要解决的是 “对象的创建” 问题,结构型主要解决的是 “类或对象的组合组装” 问题,而行为型主要解决的是 “类或对象之间的交互” 问题。
行为型设计模式比较多,有:观察者模式、模版模式、策略模式、责任链模式、状态模式、迭代器模式、访问者模式、备忘录模式、命令模式、解释器模式、中介模式。
观察者模式在实际开发中也比较常用,根据应用场景的不同有着不同的实现方式,常见的有如下几种:
这篇文章首先介绍观察者模式的原理、应用场景,以及它的几种不同实现方式。下一篇文章将基于观察者模式实现一个异步非阻塞的 EventBus,将观察者模式运用到实际场景中。
前言
上一篇文章讲的组合模式,主要应用在数据能表示成树形结构,所以不太常用。
而本篇文章要讲的 享元模式,也不太常用,因为它的使用场景也比较特殊。不过在 Java 中,你经常使用的 String、Integer 都使用到了享元模式。
前言
当你头一次看到组合模式时,可能会联想到组合关系,但其实 组合模式跟面向对象设计中的 “组合关系” 完全是两码事。
组合模式 在平时开发中不常使用,因为它的应用场景非常特殊,主要用来 处理树形结构数据。
前言
我们平时在开发接口的时候,一个常见的问题就是 接口粒度 的问题。
为了保证接口的 可复用性(或叫通用性),我们需要把接口设计得 细粒度一点,职责单一一点。但这样又会导致调用者在使用时需要调用 n 多个细粒度的接口,才能完成某个功能,这称为接口的易用性不好。
而如果 接口的粒度设计得过大,一个接口要做 n 多件事情,返回 n 多个数据,就会导致接口 不够通用、可复用性不好。
那如何解决接口的 可复用性和易用性之间的矛盾 呢?这就要谈到我们本章的 门面模式 了。
前言
适配器模式也是一种常用的结构型模式,它主要有两种实现方式,类适配器和对象适配器。下面就来介绍下适配器模式的原理和它的应用场景,以及它和前面的装饰器、代理模式又有何区别?
前言
装饰器模式也是一种结构型模式,在 Java 的 IO 类中就有使用到,所以下面我们就从 Java IO 类的设计,来看看什么是装饰器模式?使用它有什么好处?它与其他的结构型模式又有什么区别?
Java 的 IO 类库非常庞大和复杂,有十几个类,我当时在学 IO 操作时就被这些类给绕晕了。
前言
桥接模式在日常开发中使用得并不多,而且理解起来也有难度,所以下面只是简单地介绍下桥接模式,以及它怎么运用。
桥接模式 的定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。