前言
武侠小说中武术分招式和内功,比如独孤九剑就是招式,九阳神功就是内功。招式可能照猫画虎很快就能学会,但是内功心法则需要日积月累,一点一点的修炼。
在我们日常开发中也分招式和内功。比如我们常见的C#、Java、C++、等编程语言,Visual Studio、Eclipse等开发工具,ASP.NET Core、JSP等开发技术,AutoFac、CAP等框架技术,这些我们都可以认为是招式。而数据结构、算法、设计模式、重构、软件工程等则为内功。
一般内功好的人,学习剑招也会很快,就比如张无忌学会了九阳神功后,什么乾坤大挪移、少林龙爪手都能很快学会,甚至超越那些修炼了很多年的人。
在软件开发领域,那些知道数据结构、算法、设计模式、重构、软件工程等的人,当要去学习新的语言或开发技术的时候,就会学的很快,甚至可以弯道超车。为什么会这样?因为他们内功深厚,逻辑清晰,可以达到触类旁通。所以在当今的开发领域,只知道剑招很难脱颖而出,修炼内功至关重要。
另外,那些在招式上触碰到瓶颈的人,也可以通过内功的修炼来提升。
接下来,先立个Flag,先把设计模式啃下来,后边也会总结一下自己的学习笔记。
设计模式起源
设计模式起源于建筑领域。毕竟建筑领域经历了几千年的沉淀,有太多的经验可以吸取。
每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次的重用那些已有的成功的解决方案,无须再重复相同的工作。简单的讲就是:
模式是在特定的环境下人们解决某类重复出现问题的一套成功或有效的解决方案。
软件模式:是将模式的一般概念应用于软件开发领域,即软件开发的总体指导思路或参照样板。
软件模式并非仅限于设计模式,还包括架构模式、分析模式和过程模式等。实际上,在软件开发生命周期的每一个阶段都存在着一些被认同的模式。
软件模式的基础结构主要由四部分构成:
- 问题描述【待解决的问题是什么】
- 前提条件【在何种环境或约束条件下使用】
- 解法【如何解决】
- 效果【有哪些优缺点】
软件模式与具体的应用领域无关,无论是web、窗体、移动端等都可以使用。
设计模式是什么?
设计模式用于在特定条件下为一些重复出现的软件设计问题提供合理的、有效的解决方案。
设计模式(Design Pattern) 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码的可靠性。
简单就是,前辈们一步步踩坑总结的经验,使我们可以少走弯路,并写出更加优雅的代码。
最初GoF在《设计模式:可复用面向对象软件的基础》中介绍了23种经典设计模式,但是到了今天已经远远不止这些。
设计模式一般包含模式名称、问题、目的、解决方案和效果等组成要素,其中模式名称、问题、解决方案和效果又是关键要素。
- 模式名称:通过一两个简单的词来描述问题、解决方案和效果。便于理解和开发人员之间的沟通。也就是给他取一个简洁易懂的名字,一看就知道这个模式是干嘛的。
- 问题:描述了应该在何时使用模式。它包含了设计中存在的问题和问题存在的原因。使用场景
- 解决方案:描述了一个设计模式的组成成份,以及这些组成成份之间的相互关系,各自的职责和协作方式。通常解决方案通过UML类图和核心代码来进行描述。设计模式是如何实现的
- 效果:描述了模式的优缺点,以及在使用模式时应权衡的问题。优缺点
设计模式根据用途可以分为三种类型:
- 创建型(Creational)用于描述如何创建对象。包含5种创建型设计模式
- 结构型(Structural)用于描述如何实现类或对象的组合。包含7种结构型设计模式
- 行为型(Behavioral)用于描述类或对象怎样交互已经怎样分配职责。包含11种行为型设计模式
另外简单工厂模式,不属于23种设计模式,但是每本书基本都会进行介绍,可能太简单了。
下边是设计模式的分类:
创建型模式
- 单例模式 Singleton Pattern
- 简单工厂模式 Simple Factory Pattern
- 工厂方法模式 Factory Method Pattern
- 抽象工厂模式 Abstract Factory Pattern
- 原型模式 Prototype Pattern
- 建造者模式 Builder Pattern
结构型模式
- 适配器模式 Adapter Pattern
- 桥接模式 Bridge Pattern
- 组合模式 Composite Pattern
- 装饰器模式 Decorator Pattern
- 外观模式 Facade Pattern
- 享元模式 Flyweight Pattern
- 代理模式 Proxy Pattern
行为模式
- 责任链模式 Chain of Responsibility Pattern
- 命令模式 Command Pattern
- 解释器模式 Interpreter Pattern
- 迭代器模式 Iterator Pattern
- 中介者模式 Mediator Pattern
- 备忘录模式 Memento Pattern
- 观察者模式 Observer Pattern
- 状态模式 State Pattern
- 策略模式 Strategy Pattern
- 模板方法模式 Template Method Pattern
- 访问者模式 Visitor Pattern
设计模式的好处
- 借助前人的智慧和总结,避免做一些重复的工作,少走一些弯路,节省宝贵的时间。
- 得益于设计模式的通用语言,使得人们无论是做什么项目,什么语言,什么团队,对于同一个设计模式进行沟通时,基本无障碍。
- 得益于设计模式的可重用性和可扩展性,使得我们可以更好的重用一些设计方案、功能模块,甚至一个完整的系统。
- 对设计模式的使用情况进行文档化,将有利于别人更快的理解系统的设计,更加方便知识的传播。
- 有助于开发者更加深入的理解面向对象开发。
如果您觉得这篇文章有帮助到你,欢迎推荐,也欢迎关注我的公众号。