设计模式--总结和对比

设计模式原则

设计原则一句话归纳目的

开闭原则(OCP)

(Open-Close)

对扩展开放,对修改关闭减少维护带来新的风险

依赖倒置原则(DIP)

(Dependence Inversion)

高层不应该依赖底层更利于代码结构的升级 扩展

单一职责原则(SRP)

(Simple Responsibility)

一个类只干一件事便于理解,提高代码可读性

接口隔离原则(ISP)

(Interface Segregation)

一个接口只干一件事功能解耦,高聚合,低耦合

迪米特法则(LoD)

(Law of Demeter)

不该知道的不要知道只和朋友交流,不和陌生人说话,减少代码臃肿

里氏原则(LSP)

(Liskov Substitution)

子类重写方法功能发生改变,

不应该影响父类方法的含义

防止继承泛滥

合成复用原则(CARP)

(Composite/Aggregate Reuse)

尽量使用组合实现代码复用,而不使用继承降低代码耦合

GOF 23种设计模式

分类设计模式
创建型工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、单例模式(Singleton)、原型模式(Prototype)、建造者模式(Builder)
结构型代理模式(Proxy)、门面模式(Facade)、装饰者模式(Decorator)、享元模式(Flyweight)、组合模式(Composite)、适配器模式(Adaoter)、桥接模式(Bridge)
行为型

模板方法模式(Template Method)、策略模式(Strategy)、责任链模式(Chain of Responsibility)、迭代器模式(Iterator)、命令模式(Command)、状态模式(state)、备忘录模式(Memento)、中介者模式(Mediator)、解释器模式(Interpreter)、观察者模式(Observer)、访问者模式(Visitor)

各设计模式总结

设计模式目的框架源码
工厂方法模式(Factory Method)封装创建细节LoggerFactory、Calender
单例模式(Singleton)保证独一无二BeanFactory、Runtime
原型模式(Prototype)高效创建对象ArrayList、PrototypeBean
建造者模式(Builder)开放个性配置步骤StringBuilder、BeanDefinitionBuilder
代理模式(Proxy)增强职责ProxyFactoryBean、JdkDynamicAopProxy、CglibAopProxy
门面模式(Facade)统一访问入口JdbcUtils、RequestFacade
装饰者模式(Decorator)灵活扩展,同宗同源BufferedReader、InputStream
享元模式(Flyweight)共享资源池String、Integer、ObjectPool
组合模式(Composite)统一整体和个体HashMap、SqlNode
适配器模式(Adaoter)兼容转换AdvisorAdapter、HandlerAdapter
桥接模式(Bridge)不允许继承DriverManager
委派模式(Delegate)只对结果负责ClassLoader、BeanDefinitionParserDelegate
模板方法模式(Template Method)逻辑复用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)解耦数据结构和数据操作FileVisitor、BeanDefinitionVisitor

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

  • 单例模式和工厂模式

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

  • 策略模式和工厂模式

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

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

  • 策暗模式和委派模式

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

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

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

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

  • 模板方法模式和策暗模式

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

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

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

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

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

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

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

  • 装饰者模式和适配器模式

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

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

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

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

  • 适配器模式和策暗模式

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

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木羊子羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值