GOF23种设计模式收关之作

一、七大设计原则:

       开闭原则(OCP)        Open-Close-Principle

       单一原则(SRP)         Simple Responsibility principle 

       依赖倒置原则(DIP)    Dependence Inversion Principle

       接口隔离原则(ISP)    Interface segregation Principle

       迪米特法则(LOD)      Law of demeter

       里氏替换原则(LSP)    Liskov Subsitution Principle

       组合复用原则(CARP) Copmosite/Aggregate Reuse Principle

 

二、归纳总结七大设计原则:

      

设计原则 一句话归纳 目的
开闭原则 面对扩展开放,修改关闭 减少维护带来的成本开销
单一原则 类的功能需要单一 便于理解,提升代码可读性
接口隔离原则 一个接口只干一件事 功能解耦,高内聚,低耦合
迪米特法则 至少到原则 只和朋友交友,不和陌生人说话
依赖倒置原则 高层不应该依赖底层 更有利于代码结构的扩展,升级
里氏替换原则 子类重写方法,功能发生改变,不应该影响父类方法的含义 预防继承泛滥
组合复用原则 尽量使用组合实现代码复用,不使用继承 降低代码耦合

三、GOF23中设计模式:

 1、GOF的设计模式是java基础和j2EE框架知识之间一座隐形的桥梁。

 2、GOF的由来,编写23种设计模式的四位创作者,简称四人组合,gang of four,详细的故事,大家可以找些资料看一下。

 3、创建型:

      1)工厂方法模式、抽象工厂模式,简单工厂模式(其中简单工厂模式,不属于GOF23种设计模式)

      2)单例模式(懒汉、饿汉、懒汉式双重检查、内部类、枚举),需要预防通过反射创建对象。

      3)原型模式(与单例相互矛盾,有浅拷贝,深度拷贝(引用类型单独处理),可以用序列化流的形式完成对象拷贝)

      4)建造者模式

 

设计模式 一句话归纳 目的 生活案例 框架源码举例
工厂模式(Factory) 产品标准化 封装创建细节 实体工厂 LoggerFactory
单例模式(Singleton) 世界上没有长得一模一样的人 保证独一无二 CEO BeanFactory、Runtime
原型模式(Prototype) 拔一根猴毛,吹出千万个 高效创建对象 克隆 ArrayLi、PrototypeBean
建造者模式(Builder) 高配、中配、低配,想选哪配就哪配 开放个性化配置步骤 选配 StringBuilder 、BeanDefinitionBuilder

  4、结构型:

        适配器模式、装饰器模式、代理模式、门面模式、组合模式、享元模式、桥接模式。

设计模式 一句话归纳 目的 生活案例 框架源码举例
代理模式 没有资源,没有时间,找妹子的找媒婆帮忙 增强职责 媒婆 ProxyFactoryBean、JDKDynamicAOP、CglibAopProxy
门面模式 打开一扇门、走向全世界 统一访问入口 前台 JdbcUtils、RequestFacade
装饰器模式 他大舅他二舅,都是他舅 灵活扩展,同宗同源 煎饼 Buffer的Reader、InputStream
享元模式 优化资源配置,减少重复创建 共享资源池 全国社保联网 String、Integer、ObjectPool
组合模式 人在一起叫团队,心在一起叫团队 统一整体和个体 组织架构 HashMap、SqlNode
适配器模式 适合自己的,才是最好的 兼容转移,同宗同源,使用继承 电源适配器 AdvisorAdapter、HandlerAdapter
桥接模式 预定优于配置 不允许使用继承 DriverManager

   5、行为型:

         策略模式、观察者模式、责任链模式、解释器模式、模板方法模式、迭代器模式、中介 模式、命令模式、访问者模式、备忘录模式、状态模式。

设计模式 一句话归纳 目的 生活案例 框架源码举例
委派模式(Delegate) 这个需求很简单,如何实现我不管 只对结果负责 授权委托书

CLassLoader

BeanDefinitionParserDelegate

模板模式(Template) 流程全部标准化,需要微调请覆盖 逻辑复用 把大象装进大冰箱的步骤 JdbcTemplate/HttpServlet
策略模式(Strategy) 条条大路通罗马,具体哪条自己选

把选择权交给客人

每个策略结果都是一样

选择支付方式

Comparator

InstantiationStrategy

责任链模式(Chain of Responisbility) 各人自扫门前雪,莫管他人瓦上霜 解耦处理逻辑 踢皮球 FilterChain/Pipeline
迭代器模式(Iterator) 容器数据千万条,遍历利器就选它 统一对集合的访问方式 统一刷脸支付 Iterator
命令模式(Command) 路见不平一声吼,该出手时就出手 解耦请求和行为 遥控器 Runnable、TestCase
状态模式(State) 状态驱动行为,行为决定状态 备份 订单状态跟踪 LifeCycle
备忘录模式(Memento) 给我一剂后悔药 统一管理网状资源

草稿箱

数据库备份日志

StateManageable

MessageContext

中介者模式(Mediator) 联系方式我给你,怎么搞定我不管 实现特定语法解析 朋友圈 Timer
解释器模式(interpreter)

我想说“方言”

解释权归我所有

解耦观察者和消费者 摩氏密码

Pattern

ExpressionParser

观察者模式(Observer) 变化就通知我 解耦数据结构和数据操作   ContextLoaderListener
访问者模式(Visitor) 只读模式     FileVisitor/BeanDefinitionVisitor

 

四、GOF23中设计模式差异化大PK:

      1、代理模式VS中介模式:

           代理:职责增强,不仅要连接第三方服务,还会参与过程;

           中介:只负责牵线搭桥,建立联系。

       2、委派模式VS代理模式:

            委派:全权的静态代理,不做任何的功能增强;

            代理:一定会有增强,所以如果没有任何功能增强的,那么这种模式较为委派。

       3、命令模式VS策略模式:

            命令:解耦请求和处理,会有一个回调,会有反馈和处理结果。

            策略:固定好的选项,一定是同样的结果。

      4、代理模式VS装饰器模式:

            代理:组合实现功能增强&&扩展。

            装饰:继承实现增强和扩展,同宗同源。

      5、委派模式VS责任链模式:

             委派:没有流程的概念,只需要拿到结果。

             责任链:处理流程,可以扩展,可定制,最终结果又责任链中的某些Handler来决定。

       6、代理VS中介:

             代理:参与整个过程,需要跟进。

             中介:有开头、没有结尾,不参与过程跟进。

        7、责任链模式VS状态模式:

              责任链:不清楚下一个处理环节是谁;

              状态:明确知道下一个状态类是谁;

         8、工厂方法VS抽象工厂:

              

         9、桥接模式VS适配器模式:

             桥接:不用继承,适配器可以选择继承;

             适配器:类适配器用的继承,对象适配器用的组合,接口适配器实际上也是继承。

      

         10、行为型VS创建型VS:

               行为:对java中的方法的使用提出的意见

               结构:对java类的组合提出建议

               创建:对创建java对象的形式提出的建议

         11、抽象工厂VS模板方法:

                抽象工厂:形式上可能会出现抽象方法,但是并不能体现流程

                 模板方法:也是有可能出现抽象方法,但是一定某个流程中的一个不步骤。

                 严格来说,没有可比性。

          12、建造者VS装饰器模式:

                  建造者:强调对象创建步骤的个性化。

                  装饰器:更加强调扩展性,大桶套小桶。

           13、适配器模式VS中介者模式

                  适配器:解决兼容问题,可以用继承,也可以用哪个

            14、建造者模式VS装饰器模式:

                  建造者:强调对象创建步骤的个性化,一般来说会有标配。

                   装饰器:更加桥强调扩展性和大桶套小桶

              15、适配器模式VS中介者模式:

                    适配器解决兼容问题,可以用继承,也可以用组合。

               16、桥接模式VS组合模式:

                     桥接:两个继承体系,建立连接,反而就是为了满足个性。

                     组合: 为了扩展,一定是同宗同源。   

               17、门面模式VS装饰器模式:

                       门面:打开一扇窗,通向全世界,统一入口,背后有很多子系统,承担一定的静态代理作用。

                       装饰器模式:为了扩展,一定是同宗同源。

               18、工厂模式VS策略模式:

                         一般来说,二者会组合使用,策略将由工厂来创建。

               19、享元模式VS饿汉式模式:

                        我们把对象池的容器设置为单例,同时,把对象池所在类设置为单例的工厂。

               17、享元模式VS策略模式:

                       一般来说,这两个设计模式会组合使用,策略将工来创建

               19、桥接模式VS命令模式:

                       桥接:需要一个中间的类,一定有功能实现的。

                        命令:需要一个抽象的中介类,只是为了规范。

                20、委派模式VS门面模式:

                        在门面里面,可能会用到委派模式实现任务分发。

                 21、策略模式VS模板模式:

                        有时候会混淆,模板模式中可能设计的钩子方法,就是某一个策略的实现。

     

发布了53 篇原创文章 · 获赞 11 · 访问量 2216
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览