深入设计模式01---什么是设计模式

举报
老司机张师傅 发表于 2022/07/26 23:14:33 2022/07/26
【摘要】 前言近期入手了一本《Java设计模式》–刘伟,目前读了基础介绍的前两篇,发现这书中真是自有颜如玉,是一本很不错的书,向大家推荐。毕业到近期工作,编码时发现了自身的一些不足,对于开发人员来说基础的确是十分十分十分的重要,之前一直自认为基础还不错,工作了一段时间后才明白会熟练的编写基础代码,并不代表基础好,Java中包含的东西是有很多的,包括编程思想、设计模式、数据结构、虚拟机等等,都是十分重...

前言

近期入手了一本《Java设计模式》–刘伟,目前读了基础介绍的前两篇,发现这书中真是自有颜如玉,是一本很不错的书,向大家推荐。
毕业到近期工作,编码时发现了自身的一些不足,对于开发人员来说基础的确是十分十分十分的重要,之前一直自认为基础还不错,工作了一段时间后才明白会熟练的编写基础代码,并不代表基础好,Java中包含的东西是有很多的,包括编程思想、设计模式、数据结构、虚拟机等等,都是十分重要的,前段时间层自不量力的入手了一本大数据方面的书,想要深入学习大数据方面的知识,也曾经down下来Springboot的源码,想要自己深入解读,经过一系列的尝试失败后,我才明白过来,我的思想有些好高骛远了,所以决定潜下心来深入基础修行,我相信,基础的东西深入理解之后再来攻坚这些难题会手到擒来。
今日开放《深入设计模式》与《Java虚拟机》两个专栏,日后还会开放《数据结构与算法》,希望此三部曲可以带我走入Java,走入程序员,走的更高更远。
如果您也有和我一样饥渴的学习思想,如果你也是个爱折腾的程序猿,希望您能潜下心来认真看完我学习过程中记录的文章,我们共同学习,共同进步,少走弯路!
共勉!

正文

本篇属于对设计模式的简介,可以简单过一下大致内容,对设计模式有个大致的印象,当然,如果没有耐心也可以先看看后面的设计模式然后再回头看本篇。

  • 设计模式的定义

    设计模式是指在特定环境下为解决某一通用软件设计问题提供的一套解决方案,该方案描述了对象和类之间的相互作用。
    通俗点讲,设计模式就是一些我们需要膜拜的前辈们对于一些常见的软件设计问题所提出的一些通用的、经典的解决方案,通过这些模式我们可以很好的解决一些开发中的问题。

  • 设计模式的基本要素

    设计模式的关键元素有四个:模式名称、问题、解决方案、效果。

    • 模式名称:模式名称一般通过一两个关键的词代表模式的作用以及效果,大多数根据功能来命名,如某个类叫XXXAdapter,我们就知道他是个适配器类,又如XXXFactory,我们就知道这是一个工厂类,用来产生一类相似的类的实例对象。
    • 问题: 问题是指该设计中存在的问题以及存在该问题的原因,正是有了这些问题的提出,才会出现具有针对意义的设计模式。
    • 解决方案:解决方案描述了设计模式的组成成分,以及他们直接如何协作,各成分的作用,在Java中体现的就是设计模式中各个类的关系及他们的作用。
    • 效果:效果是指设计模式的解决效果,以及对该设计模式的优缺点的分析,以便提供为以后的扩展做准备。
      了解了设计模式的关键要素后,我们才能更加有规律的去学习设计模式。
  • 设计模式的分类

    目前设计模式一般根据目的进行分类,分别有创建型(5种)、结构型(7种)、行为型(11种),下面对目前已有的经典的设计模式按照类别进行一个简单的介绍(请务必过一下,看看你能识别出其中的几种)。

    • 创建型:主要用于创建对象
      • 抽象工厂模式: 提供一个创建一系列相关或者相互依赖的接口,而无需指定他们的具体类。
      • 建造者模式: 将一个复杂对象的创建与它的表示分离,使得同样的构建过程可以创建不同的表示。
      • 工厂方法模式: 定义一个用于创建对象的接口,但是让子类决定将哪一个类进行实例化,工厂方法模式让一个类的实例化延迟到其子类。
      • 原型模式: 使用原型实例指定待创建对象的类型,并且通过赋值原型来创建新的对象。
      • 单例模式: 确保一个类只有一个实例,并且提供一个全局的访问点来访问这个唯一实例。(目前菜鸡作者用的最熟的一个)
    • 结构型:主要用于处理类或者对象的组合
      • 适配器模式: 将一个类的接口转换客户希望的另一个接口,适配器让那些不兼容的类可以在一起协作工作。
      • 桥接模式: 将抽象部分与他的实现部分解耦,使他们能够各自独立变化。
      • 组合模式: 组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象。
      • 装饰模式: 动态的给一个对象增加一些功能职责,用于扩展对象功能,这种方式比继承要灵活得多。
      • 外观模式: 为子系统中的一组接口提供一个统一的入口,外观模式定义了一个更高层的接口使得这一子系统更加的容易使用。
      • 享元模式: 运用共享技术有效的支持大量细粒度对象的复用。
      • 代理模式: 顾名思义,给一个对象增加一个代理,从而实现对一些功能的扩展修改。
    • 行为型:主要用于解决类或对象的交互以及职责的分配
      • 职责链模式: 避免将处理请求的功能放在一个对象里,应当充分解耦,让处理请求的多个对象放在一个有序的执行链中,让每一个对象都有机会发挥自己的职责,请求按顺序访问,直到找到需要被处理的地方。(经典的例子:SpringMVC
      • 命令模式: 将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以支持可撤销的操作。
      • 解释器模式: 定义一种语言和解释器,用解释器来解释这种特定的语言。(如Python、JS等)
      • 迭代器模式: 提供一种方法来访问一个聚合对象中的各个元素,并且不暴露对象的内部表示。
      • 中介者模式(不是终结者): 用于实现充分解耦,让多个对象不用显示的直接相互依赖并且可以相互协作。
      • 备忘录模式: 在不破坏封装的前提下获取一个对象的内部状态,并且保存这个状态,以便于恢复。
      • 观察者模式: 定义对象之间的一种一对多依赖关系,使得每一个对象状态发生变化时与其相关的对象都得到通知并且自动更新。
      • 状态模式: 允许一个对象在内部状态改变时改变他的行为。
      • 策略模式: 一种算法模式
      • 模板方法模式: 定义一个操作中的算法,使一些步骤延迟到子类中。模板方法使子类可以不改变一个算法的内部结构即可重新定义一些特定的步骤。
      • 访问者模式: 表示一个作用域某对象结构中的各个元素的操作。访问者模式可以在不改变各个元素类的前提下定义作用于这些元素的新操作。

      好了,设计模式的简介介绍完毕了,如何?看完是不是一脑门黑线,感觉可以从入门到放弃了?嘿嘿,不用担心,我也一样滴,这里面我能看懂的也没有几个,本篇博客只是属于一个概念性的简介,这些介绍都是很官方的,不配合例子是很难看懂的(目前我也还没看例子),不过我相信,我们一起学下去,到后面只会越来越简单,记住一句话

      今天你不走,明天就要跑!

  • 设计模式的优点

    • 融合了许多专家优秀的思想,可以很好的规避一些常见的问题,一定程度上方便了程序猿直接的沟通。
    • 使程序猿可以更简单的设计复用性高、可维护的系统
    • 使得方案可以更加灵活,软件设计完全松耦合、
    • 提高了代码的质量
    • !!!更加有助于我们理解面向对象的思想,提高我们的编码质量
  • 补充与小结

    • 设计模式是指对项目基本都存在的一些问题的解决方案

    • GoF最先将模式的概念引入了软件工程,他们归纳发表了23种经典的设计模式

    • 设计模式根据目的可以分为创建型、结构型、行为型,根据范围可以分为类模式和对象模式

    • 设计模式可以大幅度提高我们的编码质量,减少我们做重复的工作,提高产品的可维护性以及容错性

    • 另外补充一个知识点,与设计模式概念完全不同的一个概念: 反模式

      • 反模式是指在对开发中经常出现的一些问题进行汇总,设计模式我们需要广泛应用,反模式则需要尽量规避,有兴趣可以自行百度。

    好了,本篇设计模式的简介就介绍到这里,希望您可以和我一样看的云里雾里,不明所有然后又不肯放弃,我们将共同学习进步。
    半原创博客,用以记录学习,希望可以帮到您,不喜可喷。
    在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。