0%

设计模式简述

该篇文章结合《研磨设计模式》以及CSDN上的优质文章,粗略的介绍了设计模式的基本概念。在学习设计模式之前有一个基础的理解,对如何学习设计模式有一个基本的方向。

设计模式简述

一、何为设计模式

1.1 设计模式的概念

设计模式:是指在软件开发中经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。

软件开发中:并不能说设计模式是软件行业独有的,事实上,很多行业都有自己的设计模式。而书中讲解的设计模式仅限于在软件开发行业中所使用的。
经过验证的:客观的说,每个人都可以总结一些用于解决特定环境下、重复出现的、特定问题的解决方案,但并不是每个人的方案都能称为**设计模式**,这些方案必须经过足够的测试验证,并得到同志们的认可和公认,才有可能称得上**设计模式**。
特定环境下:问题一定是在某个场景下的出现的,不能脱离实际的环境去讨论问题的解决方法,因为不同的环境下,即使是同一问题,解决方法也有可能大相径庭。
重复出现的:如果是对于一些独特的问题,不会重复出现的,这样的解决方案往往是具有独特性的,那么总结它们的解决方案就显得多此一举。只有这些特定问题“重复出现”,那么为这些问题总结出来的解决方案才是有意义的行为,因为当这些问题再次出现的时候,那么就可以复用总结的方案去解决问题。
特定问题:说明设计模式不是哆啦A梦,它并不具备神奇的口袋,并不是什么问题都能解决,通常一个设计模式仅仅解决某个或者某些特定的问题。因此不要迷信设计模式,也不要泛滥使用设计模式,设计模式解决不了那么多的问题,它只是“特定问题”的解决方案。

1.2 设计模式的理解

  • 设计模式是解决某些问题的办法。
  • 设计模式不是凭空想象出来的,是经验的积累和总结。
  • 设计模式并不是一成不变的,而是在不断的发展中。
  • 设计模式并不是软件行业独有的,各行各业都有自己的设计模式。

二、设计模式有何

2.1 设计模式的四要素

  1. 模式名称(Pattern Name)

    一个助记名,用一两个词来描述模式的问题、解决方案和效果。

  2. 问题(Problem)

    描述了应该何时使用设计模式。它解决了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,也可能描述了导致不灵活设计的类或对象结构。

  3. 解决方案(Solution)

    描述了护色剂的组成成分,它们之间的相互关系及各自的职责和协作方式。

  4. 效果(Consequences)

    描述了模式应用的效果及使用模式应该权衡的问题。

2.2 设计模式的分类

img

范围 创建型 结构性 行为型
工厂方法模式 Factory Method 适配器模式(类) Adapter 解释器模式 Interpreter
模板方法模式 Template Method
对象 抽象工厂模式 Abstract Factory
建造者模式 Builder
原型模式 Prototype
单例模式 Singleton
适配器模式(对象) Adapter
桥接模式 Bridge
组合模式 Composite
装饰者模式 Decorator
外观模式 Facade
享元模式 Flyweight
代理模式 Proxy
职责链模式 Chain Of Responsibility
命令模式 Command
迭代器模式 Iterator
中介者模式 Mediator
备忘录模式 Memento
观察者模式 Observer
状态模式 State
策略模式 Strategy
访问者模式 Visitor

进一步细致分类:

范围 创建型 结构性 行为型
对象创建 工厂方法模式 Factory Method
抽象工厂模式 Abstract Factory
建造者模式 Builder
原型模式 Prototype
单例模式 Singleton
接口适配 适配器模式 Adapter
桥接模式 Bridge
外观模式 Facade
对象去耦 中介者模式 Mediator
观察者模式 Observer
抽象集合 组合模式 Composite 迭代器模式 Iterator
行为扩展 装饰者模式 Decorator 访问者模式 Visitor
职责链模式 Chain Of Respinsibility
算法封装 模板方法模式 Template Method
策略模式 Strategy
命令模式 Command
性能与对象访问 享元模式 Flyweight
代理模式 Proxy
对象状态 备忘录模式 Memento
状态模式 State
其他 解释器模式 Interpreter

三、设计模式学习

3.1 为何学习设计模式

  1. 设计模式已经成为软件开发人员的“标准词汇”

    一天小菜遇到了一个开发问题,然后向大鸟去请教讨论。大鸟在知道了具体的问题后说:“你可以尝试使用”XXX模式”(XXX是某个设计模式的名称)去解决这个问题。“此时,小菜一脸茫然,XXX设计模式是个啥,如果是这样的话,就无法交流了。所以我们要学习设计模式,因为很多软件开发人员在平时交流的时候,只是使用设计模式的名称,而不会深入说明其具体的内容。

  2. 学习设计模式是个人技术能力提高的捷径

    学习设计模式,可以学习到众多前辈的经验,吸收和领会他们的设计思想,掌握他们解决问题的方法,就相当于站在这些巨人的肩膀上,可以让我们个人的技术能力得到快速的提升。学习设计模式虽然有一定的困难,但绝对是快速提高个人技术能力的捷径。

  3. 不同重复发明轮子

    设计模式是解决某些特定问题的解决方案。当我们再次面对这些问题的时候,就不用自己从头来解决这些问题,复用这些方案即可。

3.2 学习设计模式的层次

  1. 基本入门级

    要求能够正确理解和掌握每个设计模式的基本知识,能够识别在什么场景下、出现了什么样的问题、采用何种方案来解决它,并能够在实际的程序设计和开发中套用相应的设计模式。

  2. 基本掌握级

    除了具备基本入门级的要求外,还要去能够结合实际应用场景,对设计模式进行变形使用。事实上,在实际开发中,经常会碰到与标准模式的应用场景有一些不一样的情况,此时要合理地使用设计模式,就需要对它们进行适当的变形,而不是僵硬的套用。要进行变形的前提是要能准确深入的理解和把握设计模式的本质,只有把握住本质,才能确保正确变形使用而不是误用。

  3. 深入理解运用级

    要从思想和方法上吸收设计模式的精髓,并融入到自己的思路中,在进行软件的分析和设计的时候,能随意地、自然而然地应用,就如同自己思维的一部分。

3.3 如何学习设计模式

  1. 首先要调整好心态,不要指望一蹴而就,不可浮躁。

    学习和掌握设计模式需要一个过程,不同的阶段看这些设计模式绘有不同的领悟和感受。要向真正理解和掌握,必须要上升到一定的难度和深度,让你看完后思考,思考后应用,然后再看、再思考、再应用,如此反复,方能成就。

  2. 学习设计模式第一步:准确理解每个设计模式的功能、基本结构、标准实现,了解适合使用它的场景以及使用的效果。

  3. 学习设计模式的第二步:实际的开发中,尝试着使用这些设计模式,并反复思考和总结是否使用得当,是否需要做一些变化。

  4. 学习设计模式的第三步:再回头看设计模式的理论,有了实际的模式应用经验再看设计模式,会有不同的感悟,一边看一边结合着应用经验来思考。比如:设计模式的本质功能是什么?它是如何实现的?这种实现方式还可以在什么地方应用?如何才能把这个设计模式和具体的应用结合起来?这个设计模式设计的出发点是什么?等等。

  5. 学习设计模式的第五步:多次重复学习设计模式的第二步和第三步。也就是在实际开发中使用,然后结合理论思考,然后再应用,再思考……如此循环,反复多次,直到达到对设计模式基本掌握的水平。

2022年1月4日

-------- The End Thanks For Reading --------