设计模式总结

[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方式

稍微总结下,找个时间再从头到位写一遍,看看新的感悟