zoukankan      html  css  js  c++  java
  • Java进阶专题(九) 设计模式之总结

    前言

    ​ 关于设计模式的文章就到这里了,学习这门多设计模式,你是不是有这样的疑惑,发现很多设计模式很类似,经常会混淆某些设计模式。这章节我们将对设计模式做一个总结,看看各类设计模式有什么区别。需要注意的是,设计模式在于理解,不在于形式。不要为了套用设计模式而使用设计模式,而是,在业务上遇到问题时,很自然的想到设计模式作为一种解决方案。本章节参考资料书籍《Spring 5核心原理》中的第一篇 Spring 内功心法(Spring中常用的设计模式)(如果觉得本文对你有用,请点个推荐)。

    GOF 23种设计模式简介

    设计模式其实一门艺术。设计模式来源于生活,不要为了套用设计模式而去使用设计模式。设计模式是在我们迷茫时提供的一种解决问题的方案,或者说用好设计模式可以防范于未然。自古以来 ,在我们人生迷茫时,我们往往都会寻求帮助,或上门咨询,或查经问典。就在几千年前,孔夫子就教给了我们怎样做人。对于中国人来说都知道:从出
    生元婴、二十加冕、三十而立、四十不惑、五十知天命、六十花甲、七十古稀不逾矩、八、九十耄耋... ...我们这就是在用模板模式,当然,有些人不会选择这套模板。设计模式总结的是经验之谈,总结的是前人的经验,提供给后人去借鉴使用,前人栽树,后人乘凉。设计模式可以帮助我们提升代码的可读性、可扩展性;降低维护成本;解决复杂的业务问题,但是,千万千万不要死记硬背,生搬硬套。

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

    单例模式和工厂模式

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

    策略模式与工厂模式

    1、工厂模式包含工厂方法模式和抽象工厂模式是创建型模式,策略模式属于行为型模式。
    2、工厂模式主要目的是封装好创建逻辑,策略模式接收工厂创建好的对象,从而实现不同的行为。

    策略模式和委派模式

    1、策略模式是委派模式内部的一种实现形式,策略模式关注的结果是否能相互替代。
    2、委派模式更关注分发和调度的过程。

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

    工厂方法是模板方法的一种特殊实现。对于工厂方法模式的create()方法而言,相当于只有一个步骤的模板方法模式。这一个步骤交给子类去实现。而模板方法呢,将needHomework()方法和checkHomework()方法交给子类实现,needHomework()方法和checkHomework()方法又属于父类的某一个步骤且不可变更。

    模板方法模式和策略模式

    1、模板方法和策略模式都有封装算法。
    2、策略模式是使不同算法可以相互替换,且不影响客户端应用层的使用。
    3、模板方法是针对定义一个算法的流程,将一些有细微差异的部分交给子类实现。
    4、模板方法模式不能改变算法流程,策略模式可以改变算法流程且可替换。策略模式通常用来代替if...else...等条件分支语句。

    装饰者模式和静态代理

    1、装饰者模式关注点在于给对象动态添加方法,而代理更加注重控制对对象的访问。
    2、代理模式通常会在代理类中创建被代理对象的实例,而装饰者模式通常把被装饰者作为构造参数。装饰者和代理者虽然都持有对方引用,但逻辑处理重心是不一样的。

    装饰者模式和适配器模式

    1、装饰者模式和适配器模式都是属于包装器模式(Wrapper Pattern)。
    2、装饰者模式可以实现被装饰者与相同的接口或者继承被装饰者作为它的子类,而适配器和被适配者可以实现不同的接口。

    ​ 装饰者和适配器都是对某对象的包装和扩展,属于装饰器模式的实现形式。但是装饰者需要满足OOP的is-a关系,我们也讲过煎饼的例子,不管如何包装都有共同的父类。而适配器主要解决兼容问题,不一定要统一父类,比如LoginAdapter和RegistAdapter就是兼容不同功能的两个类,但RegistForQQAdapter需要注册后自动登录,因此既继承了RegistAdpter又继承了LoginAdapter。

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

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

    适配器和策略模式

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

  • 相关阅读:
    【python】10分钟教你用python打造贪吃蛇超详细教程
    盘点下那些年我们用过的编程工具IDE都有哪些
    帝国竞争算法(imperialist competitive algorithm, ICA )详解+Java代码实现
    10分钟教你使用Picgo+GitHub+ jsDelivr搭建CDN加速免费图床
    10分钟了解代码命名规范(Java、Python)
    什么是算法?从枚举到贪心再到启发式(下)-终于有人把邻域搜索讲清了!
    番茄路径优化系统介绍-专注于算法与路径优化VRP
    什么是算法?从枚举到贪心再到启发式(上)
    10分钟教你用Python打造学生成绩管理系统
    10分钟教你用Python中的Matplotlib绘制多图并合并展示
  • 原文地址:https://www.cnblogs.com/whgk/p/13359866.html
Copyright © 2011-2022 走看看