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 的管理很有用