认识设计模式

最近在学习JavaScript设计模式,对于刚刚起步的小白来讲,对有些东西仍是很模糊的,因此整理成书面的形式,以避免之后忘记,能够反复的看一下。程序员

什么是设计模式?

模式是一种可复用的解决方案,可用于解决项目开发设计中遇到的常见问题,比较咱们在编写JavaScript应用程序的实例中。咱们定义一个模板,这个模板能够对应多种状况,设计模式也是如此。可是, 你不能像使用现成的函数或程序库那样, 拿来某个模式就将其套用到本身的程序中。 模式并非一段特定的代码, 而是用于解决特定问题的通常性概念。面试

大部分模式都有正规的描述方式, 以便在不一样状况下使用。 模式的描述一般会包括如下部分:算法

  • 简单描述问题和解决方案。
  • 将进一步解释问题并说明模式会如何提供解决方案。
  • 展现模式的每一个部分和它们之间的关系。
  • 在不一样语言中的实现提供流行编程语言的代码, 让读者更好地理解模式背后的思想。

部分模式介绍中还列出其余的一些实用细节,例如模式的适用性、实现步骤以及与其余模式的关系。编程

设计模式类别

设计模式以类型划分主要分为三大类型,创造型设计模式、结构型设计模式、行为设计模式,三种类型设计模式中又包含了更多的是设计模式。设计模式

1、创造型设计模式框架

建立型设计模式是一类处理对象建立的设计模式,经过某种方式控制对象的建立来避免基本对象建立时致使设计上的问题或增长设计上的复杂度。编程语言

创造模式包括:函数

  1. 简单工厂 - 定义一个对象的工厂接口,将产品对象的实际建立工做推迟到具体子工厂类当中
  2. 工厂方法 - 基于接口数据或事件生成几个派生类的一个实例
  3. 抽象工厂 - 建立若干系列的一个实例,无需详述具体的类的做用
  4. 原型 - 用于复制或可克隆完成初始化的实例
  5. 单例 - 一个类在全局只有惟一的一个实例
  6. 生成器 - 表示中分离对象构建,使用相同的建立代码生成不一样类型和形式的对象

2、结构型设计模式工具

结构型模式与对象组合有关,一般能够用户找出在不一样对象之间创建关系的简单方法。这种模式有助于确保在程序某一部分发生变化时,系统的整个结构无需同时改变,同时对于不适合因某一特定目的而改变的系统部分,这种模式也可以帮助它们完成重组。学习

创造模式包括:

  1. 装饰者 - 向对象动态添加备选处理方法
  2. 外观 - 隐藏整个子系统复杂性的惟一一个类
  3. 享元 - 一个用于实现包含在别处信息的高效共享的实例,在有限的内存容量中载入更多对象
  4. 适配器 - 匹配不一样类的接口,所以类能够在不兼容接口的状况下共同工做
  5. 代理 - 占位符对象表明真正的对象,提供对象的替代品或其占位符,代理控制着对于原对象的访问,并容许在将请求提交给对象先后进行一些处理
  6. 桥接模式 - 可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构
  7. 组合模式 - 将对象组合成树状结构,而且能像使用独立对象同样使用它们

3、行为设计模式

行为模式专一于改善或者简化系统中不一样对象之间的通讯。

行为模式包括:

  1. 迭代器 - 顺序访问一个集合中的元素,无需了解该集合的内部原理
  2. 中介者 - 在类之间定义简化的通讯,以防止一组类显示引用彼此,迫使他们经过一个中介者对象进行合做
  3. 观察者 - 向多个类通知改变的方式,以确保类之间的一致性
  4. 访问者 - 将算法语气做用隔离开
  5. 责任链 - 沿着处理者链进行发送,收到请求后,每一个处理者均客队请求进行处理,或将其传递给链上的下个处理者
  6. 命令模式 - 将请求转换成一个包含于请求相关的全部信息的独立对象,根据不一样的请求方法,参数化,延迟请求执行或将请求执行放入队列中,且能实现可撤销操做
  7. 备忘录 - 再不暴露对象实现细节的状况下保存和恢复对象以前的状态
  8. 状态模式 - 再一个对象的内部状态变化是改变其行为,使其看上去就像改变了自身的所属类同样
  9. 策略模式 - 定义一系算法,并将每一种算法分别放入独立的类中,以使算法的对象可以相互替换
  10. 模板方法 - 在超类中定义一个算法的框架,容许子类在不修改结构的状况下重写算法的特定步骤


超类:被继承的类通常称为“超类”,也有叫作父类。是继承中很是重要的概念,它和子类一块儿形象地描述了继承的层次关系。超类设计的好与很差,首先看其内部重用率的高低,内部重用率高,必然外部重用率也高。

设计模式有什么好处

既然学习设计模式,固然也会对咱们的工做,带来不少好处,不然设计模式存在的价值也就不复存在了。设计模式不光带给咱们的并不仅是良好的编码规范,其中最重要的多是思想。

升值加薪

几乎全部关于编程的工做面试和考核中都会有关于模式的问题。了解这些知识可以帮助你发现更普遍的工做机会, 或者实现升职加薪的工做目标。

加强代码质量

模式能让你对已有的解决方案进行自定义, 而不用彻底自行开发。 代码中的错误将更少, 由于你使用的是通过证实的标准解决方案, 它考虑了全部隐藏的问题。

利于团队协做

设计模式定义了一种让你和团队成员可以更高效沟通的通用语言。你只需将模式的名称告诉给程序员,而不须要长篇累牍地解释本身那绝妙的设计思想以及其中各个类的做用。 不费吹灰之力就能搞定同事之间的沟通。你只需说“哦,这里用单例就能够了”,全部人都会理解这条建议背后的想法。只要知晓模式及其名称,你就无需解释什么是单例。

更快的解决问题

设计模式是针对软件设计中常见问题的工具箱,其中的工具就是各类通过实践验证的解决方案。 即便你从未遇到过这些问题,了解模式仍然很是有用,由于它能指导你如何使用面向对象的设计原则来解决各类问题。

反模式

反模式是软件开发中被认为是坏编程实践的某些模式。用来解决共性问题从而带来得不良的解决方案。与设计模式不一样的是,设计模式是解决常见问题的经常使用方法,这些常见问题已经正式化,一般被认为是一种良好的开发实践,而反模式则是相反的,是不可取的。

有人认为反模式是因为将一般使用的设计模式用在了错误的地方,也有人认为反模式只是一种坏习惯。简单的来讲,反模式是指在对常常面对的问题常用的低效,不良,或者有待优化的设计模式/方法。甚至,反模式也能够是一种错误的开发思想/理念。

反模式的流行背后都存在颇有说服力的缘由,但反模式对可维护性和软件的长期发展有着更为严重的影响。 按照技术债务的说法,每次选择捷径都会产生隐含的代价,而这些代价在未来的某一时刻总要偿还。 那些推迟的重构不只会影响下一次变动,并且会像经济债务同样持续地叠加利息。

总结

本文主要对设计模式作了一些简单的认识和了解,接下来的一段时间笔者会不定时更新,上述所说的23种设计模式。接下来的时间咱们就一块儿学习设计模式吧。

在学习过程当中不要太纠结于代码,学会并理解其中的思想便可,熟练掌握并能运用其种思想在实际开发的项目中,你会发现本身成长了很大一截。

相关文章
相关标签/搜索