设计模式总结

设计模式总结

设计原则总结

设计原则 一句话归纳 目的
开闭原则(OCP open-close) 对扩展开放,对修改关闭 减少维护带来新的风险
依赖倒置原则(DIP Dependence Inversion) 高层不应该依赖低层,都应该依赖抽象 更利于代码结构的升级扩展
单一职责原则(SRP Simple Responsibility) 一个类只干一件事 便于理解,提高代码可读性
接口隔离原则(ISP Interface Segregation) 一个接口只干一件事 功能解耦,高内聚、低耦合
迪米特法则(LoD Law of Demeter ) 不该知道的不要知道 只和朋友交流,不和陌生人说话,減少代码臃肿
里氏替换原则(LSP Liskov Substitution)) 子类重写方法功能发生改变,不应该影响父类方法的含义 防止继承泛滥
合成复用原则(CARP Composite/Aggregate Reuse) 尽量使用组合实现代码复用,而不使用继承 降低代码耦合

设计模式总结

设计模式是一门艺术,设计模式来源于生活,不要为了套用设计模式而去使用设计模式。设计模式是在我们迷茫时提供的一种解决问题的方案,或者说用好设计模式可以防范于未然。

设计模式总结的是经验之谈,总结的是前人的经验,提供给后人去借鉴使用,前人栽树,后人乘凉。

设计模式可以帮助我们提升代码的可读性、可扩展性,降低维户成本,解決复杂的业务问题,但是,千万干万不要死记硬背,生搬硬套。

GOF23种设计模式的归纳和总结

分类 设计模式
创建型 工厂方法模式( Factory Method)、抽象工厂模式( Abstract Factory)、单例模式( Singleton)、原型模式( Prototype)、建造者模式( Builder)
结构型 代理模式( Proxy)、门面模式( Facade)、装饰器模式( Decorator)、享元模式( Flyweight)、组合模式( Composite)、适配器模式( Adapter)、桥接模式( Bridge)
行为型 模板方法模式( Template Method)、策略模式( Strategy)、责任链模式( Chain of Responsibility)、迭代器模式( Iterator)、命令模式( Command)、状态模式( State)、备忘录模式( Memento)、中介者模式( Mediator)、解释器模式( Interpreter)、观察者模式( Observer)、访问者模式( Visitor

设计模式使用频次总结

创建型模式( Creational)

高频

工厂方法模式( Factory Method)、抽象工厂模式( Abstract Factory)、单例模式( Singleton)、建造者模式( Builder)

低频

原型模式( Prototype)

结构型模式( Structural)

高频

代理模式( Proxy)、门面模式( Facade)、装饰器模式( Decorator)、享元模式( Flyweight)、适配器模式( Adapter)、组合模式( Composite)

低频

桥接模式( Bridge)

行为型模式( Behavioral)

高频

模板方法模式( Template Method)、策略模式( Strategy)、责任链模式( Chain of Responsibility)、状态模式( State)

低频

备忘录模式( Memento)、观察者模式( Observer)、迭代器模式( Iterator)、中介者模式( Mediator)、命令模式( Command)、解释器模式( Interpreter)、访问者模式( Visitor)

一句话归纳设计模式

各种设计模式对比及编程思想总结

设计模式 一句话归纳 目的 生活案例 框架源码举例
工厂模式( Factory) 产品标准化,生产更高效 封装创建细节 实体工厂 Loggerfactory、Calender
单例模式(Singleton) 保证只有一个实例 保证独一无二 CEO Beanfactory、 Runtime
原型模式(Prototype) 根据一个实例克隆出多个实例 高效创建对象 克隆 Arraylist、Prototypebean
建造者模式(Builder) 根据需要建造实例 开放个性配置步骤 选配 String Builder、 BeanDefinitionBuilder
代理模式( Proxy) 使用代理来做需要做的事 增强职责 媒婆 ProxyFactoryBean、JdkDynamicAopProxy、CglibAopProxy
门面模式( Facade) 提供一个访问各个系统的入口 统一访问入口 前台 Jdbcutils、Requestfacade
装饰器模式(Decorator) 为接口提供装饰,增强功能 灵活扩展、同宗同源 煎饼 BufferedReader、InputStream
享元模式(Flyweight) 优化資源配置,减少重复浪费 共享资源池 全国社保联 String、 Integer、 ObjectPool
组合模式(Composite) 人在一起叫团伙,心在一起叫团队 统一整体和个体 组织架构树 Hashmap、 SqlNode
适配器模式( Adapter) 适合自己的,才是最好的 兼容转换 电源适配 Advisoradapter、Handleradapter
桥接模式(Bridge) 约定优于配置 允许用继承 DriverManager
委派模式(Delegate) 这个需求很简单,怎么实现我不管 只对结果负责 授权委托书 ClassLoader、 BeanDefinitionParserDelegate
模板模式(Template) 流程全部标准化,需要微调请覆盖 逻辑复用 固定流程 JdbcTemplate、 Httpservlet
策略模式(Strategy) 条条大道通北京、具体哪条你来定 把选择权交给用户 选择支付方式 Comparator、 InstantiationStrategy
责任链模式( Chain of Responsibility) 各人自扫门前雪、莫管他人瓦上霜 解耦处理逻辑 踢皮球 FilterChain、Pipeline
迭代器模式( Iterator) 流水线上坐一天、每个包裏扫一遍 统一对集合的访问方式 逐个检票进站 Iterator
命令模式( Command) 运筹帷幄之中、决胜干里之外 解耦请求和处理 遥控器 Runnable、 TestCase
状态模式( State) 状态驱动行为、行为決定状态 绑定状态和行为 订单状态跟踪 Lifecycle
备忘录( Memento) 给我一剂“后悔药“ 备份 草稿箱 StateManageableMessageContext
中介者( Mediator) 联系方式我给你,怎么搞定我不管 统一管理网状资源 朋友圈 Timer
解释器模式( Interpreter) 我想说“方言”,一切解释权归我所有 实现特定语法解析 摩斯密码 Pattern、 ExpressionParser
观察者模式( Observer) 到点就通知我 解耦观察者与被观察者 闹钟 ContextLoaderListener
访问者模式( Visitor) 横看成岭侧成峰,远近高低各不同 解耦数据结构和数据操作 KPI考核 FileVisitor、BeanDefinitionVisitor

设计模式之间的关联关系和对比

单例模式和工厂模式

实际业务代码中,通常会把工厂类设计为单例

策略模式和工厂模式

1、工厂模式包含工厂方法模式和抽象工厂模式是创建型模式,策略模式属于行为型模式。

2、工厂模式主要目的是封装好创建逻辑,策略模式接收工厂创建好的对象,从而实现不同的行为。

策略模式和委派模式

1、策略模式是委派模式内部的一种实现形式,策略模式关注的结果是否能相互替代。

2、委派模式更关注分发和调度的过程。

模板方法模式和工厂方法模式

工厂方法是模板方法的一种特殊实现。

模板方法模和略馍式

1、模板方法和策略模式都有封装算法。

2、策略模式是使不同算法可以相互替换,且不影响客户端应用层的使用。

3、模板方法是针对定义一个算法的流程,将一些有细微差异的部分交给子类实现。

4、模板方法模式不能改变算法流程,策略模式可以改变算法流程且可替换,策略模式通常用来代替if.else.等条件分支语句。

装饰者模式和静态代理模式

1、装饰者模式关注点在于给对象动态添加方法;而代理更加注重控制对对象的访问。

2、代理模式通常会在代理类中创建被代理对象的实例,而装饰者模式通常把被装饰者作为构造参数。

3、装饰者和代理者虽然都持有对方引用,但逻辑处理重心是不一样的。

装饰者模式和适配器模式

1、装饰者模式和适配器模式都是属于包装器模式( Wrapper Pattern)。

2、装饰者模式可以实现被装饰者相同的接口或者继承被装饰者作为它的子类,而适配器和被适配者可以实现不同的接口。

适配器模式和静态代理模式

适配器可以结合静态代理来实现,保存被适配对象的引用,但不是唯一的实现方式。

适配器模式和策略模式

在适配业务复杂的情况下,利用策略模式优化动态适配逻辑。

打赏

请我喝杯咖啡吧~

支付宝
微信