0%

设计模式之二 一句话描述设计模式

前言

这里尽量尝试分别用一句话描述GoF的23种设计模式。

创建型模式

创建型模式对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。

简单工厂模式

一个具体工厂通过泛化创建一类产品。

工厂方法模式

一类抽象工厂通过泛化创建一类产品。

抽象工厂模式

一类抽象工厂通过泛化创建多类产品(产品族)。

建造者模式(生成器模式)

生成器模式将对象构造过程划分为一组步骤,每次创建对象时,只需调用创建该对象所需的步骤。
(如果将抽象工厂模式看成汽车配件生产工厂,生产一个产品族的产品,那么建造者模式就是一个汽车组装工厂,通过对部件的组装可以返回一辆完整的汽车
eg:House house = HouseBuilder.buildWalls(args).buildRoof(args).buildDoors(args).getResult()
(生成器重点关注如何分步生成复杂对象。 抽象工厂专门用于生产一系列相关对象。 抽象工厂会马上返回产品, 生成器则允许你在获取产品前执行一些额外构造步骤)

单例模式

通过getInstance()获取一个类的唯一实例。
(这里有懒汉模式和饿汉模式,懒汉是需要调用这个实例时才初始化唯一实例,饿汉是在这个类创建时就初始化了这个实例。)

原型模式

通过一个类的实例,创建出一个一样的实例。
(深克隆和浅克隆)

结构型模式

结构型模式描述符合将类或者对象结合成一起形成更大的结构,就像搭积木。

适配器模式

将一个原本可能不兼容的客户类和提供服务的服务类提供兼容的模式。
(比如JDBC)

桥接模式

将一个大类或者一系列紧密相关的类拆封成抽象(比如软件的GUI)和实现(实现功能的API)两个独立的层次结构。
⚠️桥接模式和适配器模式的区别
适配器: 编写一个让原有的两个不兼容的接口相容的接口。
桥接模式: 分离抽象和实现。

装饰模式

在不用修改原对象代码的情况下为对象新增额外的行为。
(复用final修饰的最终类已有行为的唯一方法就是使用装饰模式)
(适配器能为被封装对象提供不同的接口, 代理模式能为对象提供相同的接口, 装饰则能为对象提供加强的接口。)

外观模式

用在子系统和访问之间,用于对访问屏蔽复杂的之系统调用。
(感觉spring boot中的ControllerService的调用就非常符合外观模式的思想)

享元模式

享元模式通过共享不变的状态,单独存储变化的状态来优化大量类似对象同时占用内存过多的问题。
(享元展示了如何生成大量的小型对象, 外观模式则展示了如何用一个对象来代表整个子系统)

代理模式

由于某些原因无法直接对某个对象进行访问,所以通过一个接口和该对象一样的第三方类来进行控制访问。
(比如记录日志代理,该代理伪装成控制台,对命令的执行进行记录)

组合模式

将对象组合成树形结构以表示“部分-整体”的结构关系,使得用户对单个对象和组合对象的使用具有一致性。
(装饰类似于组合, 但其只有一个子组件。 此外还有一个明显不同: 装饰为被封装对象添加了额外的职责, 组合仅对其子节点的结果进行了 “求和”)

行为模式

这类模式负责对象间的高效沟通和职责委派。

责任链模式

责任链模式允许请求沿处理者链进行传递,直到遇到应该处理该请求的对象。
(比如请假条沿着:班长->辅导员->院领导 传递,按请假时长判断由哪个处理者处理。)
⚠️Tips:
1、责任链上的每个处理者都保存着下个处理者引用的成员变量。客户端可以通过将处理者传递给上个处理者的构造函数或设定方法来创建链。
2、请求可以发送给链上的任意一个处理者,而非第一个处理者。

命令模式

命令模式将操作转换为对象,操作的参数作为对象的成员变量。并且能够通过转换来延迟操作的执行、将操作放入队列、保存历史命令或者向远程服务发送命令等。

迭代器模式

迭代器封装了与复杂数据结构进行交互的细节,为客户端提供多个访问集合元素的简单方法。

中介者模式

中介者模式用于解耦之前紧密关联的各组件,他们状态发生变化时由原来的直接通知其他组件变为通知中介者。
(该模式让你将对象间的所有关系抽取成为一个单独的类, 以使对于特定组件的修改工作独立于其他组件。)

备忘录模式

备忘录模式将对象状态的副本存储在一个名为备忘录的特殊对象中,可以方便操作撤销和状态回滚,除了创建备忘录的对象外,任何对象都不能访问备忘录的内容。

观察者模式

当一个对象(Publisher)状态的改变需要通知其他对象(Subscriber)时,采用该模式。

责任链模式、命令模式、中介者模式和观察者模式用于处理请求发送者和接收者之间的不同连接方式:
1、责任链按照顺序将请求动态传递给一系列的潜在接收者, 直至其中一名接收者对请求进行处理。
2、命令在发送者和请求者之间建立单向连接。
3、中介者清除了发送者和请求者之间的直接连接, 强制它们通过一个中介对象进行间接沟通。
4、观察者允许接收者动态地订阅或取消接收请求。

状态模式

状态模式将所有特定于状态的代码抽取到一组独立的类中。

策略模式

策略模式将不同行为抽取到一个独立类层次的结构中,并将原始类组合成同一个,从而减少重复代码。

模板方法模式

模板方法模式在超类中定义了一个算法的架构,允许子类在不修改结构的情况下重写算法的特定步骤。

访问者模式

访问者模式是一种将实际操作和数据结构分离的设计模式。
(一般是对象结构比较稳定,但经常需要在此对象结构上定义新的操作)

聚合和组合的区别:
聚合:对象A包含对象B,对象B可以独立对象A存在。
组合:对象A由对象B构成,A负责管理B的生命周期。B无法独立A存在。

-------------------本文结束 感谢阅读-------------------