【设计模式目录】简单阐述一下设计模式

673 阅读8分钟

这是我参与更文挑战的第19天,活动详情查看:更文挑战

前言

我爆肝了将近一个月的时间,写完了二十二种设计模式的学习笔记,还有一个解释器模式我打算后续有空就补一下。

我个人觉得我的设计模式系列更加适合想要从零开始学习设计模式的小伙伴,因为我的开发经验也不是特别丰富,内容不涉及实际开发,仅供学习参考。

如果有什么不正确的地方,希望各位大佬能帮我指点一二。为了能够有修改错误的时间,我打算一篇一篇地来发布文章,有问题会立刻修改。

设计模式是什么?

设计模式的本质是面向对象设计原则的实际运用,是对类的封装、继承、多态以及类的关联关系和组合管理的充分理解和应用

设计模式这个概念是从建筑设计引进来的,设计模式总结了软件开发中经常遇见的一些场景和解决办法。设计一个软件就好比设计一个房子,如果我们想建高楼大厦,那就必须得从地基就开始考虑该如何建,如果只是想建个小平房,那就随便建就好了。

在软件设计中,功能模块和技术框架都需要用到设计模式,功能模块中一般是一个设计模式+算法+数据结构,技术框架中大多数都是多种设计模式混合适用,所以学好设计模式,我们才能够读懂开源框架的源码,进而能够在开发中适用。

我学完设计模式之后,我最大的感受就是,学习设计模式能够帮助我们提高系统的可扩展性(能够很方便地增加新功能)、可读性(编程规范,也是别人学了用了,你没学就看不懂,卷起来)、可重用性(提高相同代码的使用)、可靠性(新增功能不会影响到旧的功能),最终实现降低耦合、提高内聚的目的。

我之前写的代码是完全没有思路的,也不懂最好是采用组合对象的方式去实现新功能,整体的代码架构定下来之后,每当出现一个需求,我都是去修改原来内部的代码,这样的开发流程十分地麻烦,如果不是对我的代码非常地熟悉,别人来改可能完全改不了,就算有很多注释,而且也极少地去复用对象,增大了系统内存的开销。

“最厉害的武功就是忘记所有招式。”,学习设计模式也是一样,我们在学习如何套用、适用设计模式的同时,更多的是学会了如何去运用面向对象语言,而这些精华才是能够帮助我们提升代码质量的关键!

23种设计模式可以分为三大类:创建型模式、结构型模式、行为型模式,这三大类设计模式是分别站在不同角度来运用七大设计原则。

在创建型模式中,主要的关注点就是怎么创建对象,怎么样能够把创建和使用分离开来。让某些类来承担创建类的职责,类对象的使用者就不需要关心创建的过程,就像我们去商场买东西,那我们也不需要知道商品是如何生产的,毕竟去使用这个商品才是我们要做的事,至于它怎么生产出来的就是厂商才需要关注的了。

在结构型模式中,主要的关注点是如何构建类或对象的结构,分为类结构模式和对象结构模式,前者是通过继承来构建接口和类的结构,后者是通过组合或者聚合来构建对象的结构。对象结构模式会比类结构模式更加的灵活,因为对象结构模式满足了合成复用原则。补充一点,类结构模型是通过继承来建立类之间的关系,有点类似硬编码了,所以它的灵活性不会太高,而对象结构模型是通过创建类的对象来建立类之间的关系,类之间都保持着自己的封装性,耦合程度不会太高。像我们都会用到的手机壳,手机壳是用来保护手机的,那如果手机壳是跟手机一体的,这确实是可以起到保护手机的作用,但是我们想换手机壳就只能通过维修店来换了,这实属麻烦。

在行为型模式中,主要的关注点是类或对象之间是如何相互协作的,分为类行为模式和对象行为模式,前者是通过父类里已经写好的方法调用子类实现的抽象方法来完成协作,后者是通过组合或者聚合对象,然后把操作委托给这些对象的方法来完成协作。这里的对象行为模式是满足合成复用原则的,所以。。你懂的。

范围\目的创建型模式结构型模式行为型模式
类模式工厂方法(类)适配器模板方法、解释器
对象模式单例 原型 抽象工厂 建造者代理 (对象)适配器 桥接 装饰 外观 享元 组合策略 命令 职责链 状态 观察者 中介者 迭代器 访问者 备忘录

七大设计原则

说到二十三种设计模式,就不得不说以下七大设计原则了,设计模式都是为围绕着七大设计原则来实现的,可以说学好了七大设计原则,设计模式就学会一半了。

七大设计原则

创建型模式

这种模式提供一种在创建对象的同时隐藏创建逻辑的方式

其中工厂模式是包含了抽象工厂模式、工厂方法模式和简单工厂模式的,我看到有些博客是把它们分开来的,这里我全部放在一起了,工厂模式和单例模式的内容会比较多一些。

工厂模式:把创建对象的方式封装起来。

单例模式:保证某些类只有一个对象实例。

建造者模式:更加方便地创建一个对象。

原型模式:提供复制一个对象的方法。

工厂模式

工厂模式

单例模式

单例模式

构建器模式

构建器模式

原型模式

原型模式

结构型模式

这种设计模式关注类和对象的组合关系

其中代理模式和享元模式是比较复杂的,可以考虑先看了其他模式再来看这两个,大佬可以直接看。

适配器模式:为了让一些类符合现在定义的接口。

桥接模式:用组合对象代替继承来实现多维度的类。

组合模式:屏蔽掉组合对象和单个对象的差别。

装饰器模式:用组合对象代替继承来实现类功能的扩展。

门面模式:提供高层接口,屏蔽底层操作逻辑。

享元模式:共享和复用对象。

代理模式:通过代理的方式增加与业务无关的功能。

适配器模式

适配器模式

桥接模式

桥接模式

组合模式

组合模式

装饰器模式

装饰器模式

门面模式

门面模式

享元模式

享元模式

代理模式

代理模式

行为型模式

这种设计模式关注于对象之间的通信。

责任链模式:把不同维度的职责拆分到不同的类中,通过一条链条把他们串联起来。

命令模式:解耦请求者和实现者,把操作过程封装到命令中。

策略模式:把不同的算法策略、处理策略封装到类中。

迭代器模式,常用地的集合迭代器就是这个模式

中介者模式,将对象间网状结构改成星装结构

备忘录模式,保存对象的状态

观察者模式,发布订阅模式

状态模式,不同状态调用不同对象来处理

模板模式,父类定义抽象方法,由子类实现

访问者模式,不同的访问者用不同的方式使用对象。

解释器模式,比较难,目前还没学

责任链模式

责任链模式

命令模式

命令模式

解释器模式

迭代器模式

迭代器模式

中介者模式

中介者模式

备忘录模式

备忘录模式

观察者模式

观察者模式

状态模式

策略模式

策略模式

模板模式

模板模式

访问者模式

访问者模式