设计模式解读

定义:设计模式实际上是一套被反复使用,思想成熟,经过分类和无数实践设计经验的总结。

设计模式存在的根本原因是为了代码复用,增加可维护性。有如下原则:

1、开闭原则:对扩展开放,对修改关闭。

2、里氏转换原则:子类继承父类,单独调完全可以运行。

3、依赖倒转原则:引用一个对象,如果这个对象有底层类型,直接引用底层类型。

4、接口隔离原则:每一个接口应该是一种角色。

5、合成/聚合复用原则:新的对象应使用一些已有的对象,使之成为新对象的一部分。

6、迪米特原则:一个对象应对其他对象有尽可能少的了解。

模式分类:

1、单列模式:单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,若不存在就创建了再返回,这就是确保一个类只有一个实例对象。在javascript里,单例作为一个命名空间提供者,从全局命名里提供一个唯一的访问点来访问该对象。

作用:

(1)模块间通信;

(2)系统中某一个类的对象只能存在一个;

(3)保护自己的属性和方法。

注意事项:

(1)注意this使用;

(2)闭包容易造成内存泄漏,不需要的干掉;

(3)注意new的成本(继承)。

2、构造函数模式:构造函数用于创建特定类型的对象——不仅声明了使用的对象,构造函数还可以接收参数以便第一次创建对象的时候设置对象的成员值。你可以自定义自己的构造函数然后在里面声明自定义类型对象的属性或方法。

在js里面,构造函数通常是认为用来实现实例的,js没有类的概念,但是有特殊的构造函数。通过new关键字来调用自定义的构造函数,在构造函数内部,this关键字引用的是新创建的对象。

作用:

(1)用于创建特定类型的对象;

(2)第一次声明的时候给对象赋值;

(3)自己声明构造函数,赋予属性和方法。

注意事项:

(1)声明函数的时候处理业务逻辑;

(2)区分和单例的区别,配合单列实现初始化;

(3)构造函数大写字母开头。(建议)

(4)注意new的成本。(继承)

将构造函数放进对象AA,BB里面实现构造函数模式与单例模式一一对应。

3、工厂模式:工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类。该模式使一个类的实例化延迟到子类。而子类可以重写接口方便创建的时候指定自己的对象类型(抽象工厂)。

这个模式十分有用,尤其是创建对象的流程赋值的时候,比如依赖于很多设置文件等。并且,你会经常在程序里看到工厂方法,用于让子类定义需要创建的对象类。

模式作用:

(1)对象的构建十分复杂;

(2)需要依赖具体的环境创建不同实例;

(3)处理大量具有相同属性的小对象。

注意事项:

(1)不能滥用工厂,有时候仅仅是给代码增加复杂度。

4、代理模式:为其他对象提供一种代理以控制对这个对象的访问。代理模式使得代理对象控制具体对象的引用。代理几乎可以是任何对象:文件、资源、内存中的对象,或者是一些难以复制的东西。

模式作用:

(1)远程代理(一个对象将不同空间的对象进行局部代理);

(2)虚拟代理(根据需要创建开销很大的对象如渲染网页暂时用展位代替真图);

(3)安全代理(控制真实对象的访问权限)。

(4)只能指引(调用对象代理处理另外一些事情如垃圾回收机制)。

注意事项:

(1)不能滥用代理,有时候仅仅是给代码增加复杂度。

 5、命令模式:用来对方法调用进行参数化处理和传送,经过这样处理过的方法调用可以在任何需要的时候执行。也就说该模式旨在将函数的调用、请求和操作封装成一单一的对象,然后对这个对象进行一系列的处理。它也可以用来消除调用操作的对象和实现操作的对象之间的耦合。这为各种具体的类更换带来极大的灵活性。

模式作用:

(1)将函数的封装、请求、调用结合为一体。

(2)调用具体的函数解耦命令对象与接收对象。

(3)提高程序模块化的灵活性。

注意事项:

(1)不需要接口一致,直接调用函数即可,以免造成浪费。

推荐网站(讲的很详细很具体)http://www.admin10000.com/document/1085.html

原文地址:https://www.cnblogs.com/weilantiankong/p/4720420.html