设计模式简介

2020-08-01   1,092 次阅读


设计模式

大家好,欢迎来的设计模式的世界,今天我们开始学习Java中的设计模式,提到“设计模式”这几个字,总给人一种神秘的感觉。特别是对于初学者,对于设计
模式可谓是很朦胧的一种认知,大多数停留在“听过”。本文将揭开设计模式的面纱,识其庐山真面目。在学习之前,我希望我们可以将
之前对设计模式的认识先忘却,将自己净化成一张白纸重新描绘设计模式的认知图。

1.什么是设计模式?

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。
设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。
这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。

通俗解释:

在我们了解了java的抽象,继承,多态,接口这些概念后,还不能写出优秀的代码。作为一名合格的面向对象设计者,
写出的代码是弹性的,便于维护的,可以应对需求的变化。
引入设计模式后,你会知道什么场景应该如何设计自己的代码便于后期需求
更改后不用牵一发而动全身。

2.为什么要学习设计模式?

正如前面所介绍的,设计模式主要是为了让程序员写出更加优秀的代码以便于后期的维护与管理,除此之外,设计模式更是编程世界的一张通用门票。编程的语言
种类很多,java,c,c++,python,php...这些语言你可能并不会都掌握,但是学会了设计模式,无论是哪种语言,你都可以设计出符合场景的编程思路,只是换一种语言去实现它罢了。

当你写了几行代码,看过来看过去总觉得好像不是很好,却又不知道该如何写更好,那么,你该学习设计模式了。

当你阅读别人的代码,发现明明几行代码可以搞定的,为什么却新建了好几个类,绕来绕去,你不得其解,那么,你该学习设计模式了。

当你完成一个迭代,需求会上新增了许多改动,你拿到代码,得出四个字“牵一发而动全身”,那么,你该学习设计模式了。

当你阅读优秀的框架源代码很困难,不知道别人为何要这样写,那么,你该学习设计模式了。

......

在日常的开发交流中,设计模式还是程序员之间一种默契,当你说出简单的“策略模式”或者“适配器模式”这样的专有词汇,对方立马心领神会,这后面涵盖的编程逻辑无需多余的沟通与解释。

下面我们一起来看一下在Java中,前人为我们总结出的设计模式。

3.设计模式汇总

模式名称简介
策略模式开启入门之旅,封装算法,随意替换
模板方法模式深入对算法的封装,让子类去延伸想要的实现
观察者模式让你的对象知悉现况,报社与看报人之间的订阅关系
命令模式升级封装思维,对调用方法的行为进行封装
状态模式事物的状态,通过改变对象的状态而改变对象的行为
迭代器与组合模式管理集合,如何创建一些对象超集合,使其可遍历却不可被窥视内部的存储方式
工厂模式烘烤00的精华,封装创建对象的代码,建立一个工厂
单例模式独一无二的对象
装饰者模式装饰对象,在不修改底层代码的前提下,给对象赋予新的使命
适配器与外观模式一切皆有可能,包装任何接口去适配其他的接口
代理模式控制对象的访问,代理指定对象的某些行为,同时可以扩展自身的方法,使得外部只能访问指定的方法
复合模式模式中的模式
其他的模式并非每一种都广受欢迎和常用

4.设计模式分类

目前有25种设计模式,为了更方便我们对设计模式的学习与记忆,前辈们根据模式之间的共性对其进行分类了分类,如下:

行为型设计模式

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

创建型设计模式

  • 单例模式(Singleton)
  • 工厂模式(Factory Method)
  • 抽象工厂模式(Abstract Factory)
  • 构建模式(Builder)
  • 原型模式(Prototype)

结构型设计模式

  • 装饰者模式(Decorator)
  • 适配器模式(Adapter)
  • 外观模式(Facade)
  • 组合模式(Composite)
  • 代理模式(Proxy)
  • 过滤器模式(Filter、Criteria Pattern)
  • 桥连接模式(Bridge)
  • 亨元模式(Flyweight)

5.学习前的准备知识

由于本次是使用Java语言作为案例代码的编写,所以在学习前请掌握以下几点以便于更好的理解设计模式:

  • Java的基本语法
  • 类与接口的声明定义
  • 继承实现以及其特性
  • 接口的特性

6.如何学习设计模式?

设计模式很多种,在学习过程中一定要细嚼慢咽,由浅入深。程序的世界其实和现实生活的世界很像,
所以每一种模式被前人总结下来都是为了解决我们身边随时都可能发生的场景。当通过案例学习完一种模式后,
一定要认真思考以下两个问题:

  • 它解决了什么?
  • 变换场景后,可能存在的不足

带着疑问,去学习后面的模式。模式不需要死记硬背,理解其中的思维,并找机会运用它。比如看看自己原来的代码,
试着用设计模式去优化这些代码。

无论是学习什么知识,以下三条路都可以伴随你的整个学习生涯。

  • 温故而知新
  • 好记性不如烂笔头
  • 阅读优秀源码

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议