Skip to content

design-pattern

Factory

get: 找到类的特性,构造不同子类。同时用另一个管理类去选择和实例化对应的子类。

类的拆分和管理也很重要:比如类里所拥有的 item 可以是另一个类

简单静态工厂

通过静态方法直接返回产品,形如 Integer.valueOf(), List.of()...

单例

注意单例的延迟加载,即在调用方第一次调用getInstance()时才初始化全局唯一实例(和语言特性有关,如果是 java 多线程的话比较有坑,一般是通过约定让框架(例如Spring)来实例化这些类,保证只有一个实例)

Strategy

抽象策略与具体策略;使用管理类时,需要在上下文指定当前使用的具体策略是哪一个

简单工厂构造出的工作类和管理类一共两个类;而如果管理类自己去维护工作类,调用方就完全不需要了解工作类了。

Decorator

背景:满足一些只在某种特定情况下才会执行的特殊行为的需要

实现:它把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象

clone 模式

模板方法

父类(abstract class)定义算法骨架与步骤,子类去填充算法细节。这样以实现父类对流程的控制。

Facade

外观模式 就是最普通的一个管理类去统一调用别的类啦

Builder

通过 abstract class 去规范化子类步骤

Observer

因为 js 是偏函数式语言, c++/java 是面向对象语言,所以实现起来的区别也可以体会一下:

js 的话,observer 接收一个回调函数即可,subject 取消监听函数也可以由 observer.addListener() 返回。

java 的话,observer 和 subject 都得是一个类,并且两个类不要耦合,通过 observer 的抽象类与 subject 的 interface 建立连接。

状态模式

I like it.

Composite

I also like it. 对于分公司或者 tree 的管理很有用