当前位置: 移动技术网 > IT编程>软件设计>设计模式 > 各设计模式的总结和对比

各设计模式的总结和对比

2020年11月12日  | 移动技术网IT编程  | 我要评论
一句话归纳设计原则设计原则一句话归纳目的开闭原则(OCP)Open-Close对扩展开发,对修改关闭减少维护带来新的风险依赖倒置原则(DIP)Dependence Inversion高层不依赖低层更利于代码结构的升级、扩展单一职责原则(SRP)Simple Responsibility一个类只干一件事便于理解,提高代码可读性接口隔离原则(ISP)Interface Segregation一个接口只干一件事

一句话归纳设计原则

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

设计模式使用频次总结

创建型模式(Creational)

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

低频:原型模式

结构型模式(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)世界上只有一个自己保证独一无二CEOBeanFactory、Runtime
原型模式(Prototype)拔出一根猴毛,吹出千万个高效创建对象克隆ArrayList、PrototypeBean
建造者模式(Builder)各种方式进行适配开放个性配置步骤选配StringBuilder、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、装饰者模式可以实现被装饰者与相同的接口或者继承被装饰者作为它的子类,而适配器和被适配器可以实现不同的接口

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

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

  • 适配器模式和策略模式

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

  • 模板方法模式和建造者模式

两者很大的交集,建造者模式比模板方法模式多了一个指挥类,该类体现的是模板方法模式中抽象类的固定算法的功能,是一个创建对象的固定算法

  • 状态模式和策略模式

1、状态模式重点在各状态之间的切换,从而做不同的事情,策略模式更侧重于根据具体情况选择策略,并不涉及切换

2、状态模式不同状态下做的事情不同,而策略模式做的都是同一件事。例如,聚合支付平台,有支付宝、微信支付、银联支付,虽然策略不同,但最终做的事情都是支付

3、状态模式,各个状态的同一方法做的是不同的事,不能互相替换

  • JDK动态代理和CGLIB动态代理区别

1、JDK动态代理:要求目标对象实现一个接口,但是有时候目标对象只是一个单独的对象,并没有实现任何的接口,这个时候就可以用CGLib动态代理

2、CGLib动态代理,它是在内存中构建一个子类对象从而实现对目标对象功能的扩展

3、JDK动态代理是自带的,CGlib需要引入第三方包

4、CGLib动态代理基于继承来实现代理,所以无法对final类、private方法和static方法实现代理

本文地址:https://blog.csdn.net/vincent_wen0766/article/details/109625090

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网