[Musings]
创建型:
- 单例模式Singleton
单例模式分为Eager Initialization/ Lazy Initialization, eager就是在创建实例本身就已经初始化了实例,资源可能浪费,但是线程安全,Hungry则是每次调用的时候才会创建,线程不安全 - 工厂模式Factory Method
某一类产品一起写,说白了就是买手机,买华为/苹果/小米,一开始是自己去决定的,就得写个if else或着switch,现在直接由工厂根据入参决定,只需调用工厂的getInstance之类的方法,所有本身自己手写的逻辑就委托给工厂就行,主打的就是一类产品 - 抽象工厂模式 Abstract Factory
抽象工厂其实就是,一个家族的产品聚合,比如统一都是华为生态的产品,就用抽象工厂实现 - 建造者模式 Builder
对于超多的参数来调用构造函数的,可以规避掉超大的构造函数,且对于一些比较灵活的字段属性,可以慢慢构建,使用链式调用返回this指针,可以便于书写 - 原型模式 Prototype
方便对象的复制,实现cloneable接口或者手动实现拷贝构造函数
结构型:
- 适配器模式 Adapter
插头例子,多封装一层,适配公共的方法 - 桥接模式 Bridge
ali/weixin/刷卡多种支付方式,适配线上/线下多种支付场景 - 组合模式 Composite
文件/文件夹继承自文件系统抽象方法,可以是先多层嵌套 - 装饰器模式 Decorator
附魔enchantment,不同的武器,不同的附魔效果 - 外观模式 Facade
家庭影院,多增加一层,来份封装方法,一对多 - 享元模式 Flyweight
游戏中渲染树木,提取公共元素,利用缓存,提升性能 - 代理模式 Proxy
门禁卡例子,多封装一层,多对多
行为型:
- 观察者模式 Observer
observer和publisher,publisher里维护订阅者数组,推送消息 - 中介者模式 Mediator
多了个中间人,所有的消息中转都经过Mediator - 策略模式 Strategy
把switch语句里的逻辑都打包放进了策略里,mediator通过策略来执行通知逻辑 - 状态模式 State
通过状态来控制publisher的推送逻辑 - 责任链模式 Chain of Responsibility
checker案例,每个cheker在发现无法处理问题,就会提交给下一个checker,可以外部手动setNextChecker - 命令模式 Command
智能家居案例,通过实现command接口来实现不同的command,然后交由控制器来实现excute和undo以及一系列操作 - 解释器模式 Interpreter
sql语法解析案例,定义expression接口,通过语句的识别来定义不同类型的表达式,一类是简单的字符串比较,一类是表达式比较 - 迭代器模式 Iterator
迭代器申明hasNext和next方法,可以利用泛型 - 备忘录模式 Memento
备忘录案例,实现撤销,恢复等功能,使用history类来包含list实现回撤等功能 - 模版方法模式 Template Method
做饮料案例,抽象类写默认实现,同时引入protected钩子方法,来允许子类修改模版行为 - 访问者模式 Visitor
Element和Visitor案例,Element接口实现visit方法,所有concrete element类都把this传给visitor
Visitor接口通过重载实现不同的visit方式
稍微总结下,找个时间再从头到位写一遍,看看新的感悟