js设计模式有哪几种 (js设计模式面试题)
本文目录导航:
js设计模式有哪几种
一.单例模式

单例模式也称作为单子模式,更多的也叫做单体模式。
为软件设计中较为简单但是最为常用的一种设计模式。
在JavaScript里,实现单例的方式有很多种,其中最简单的一个方式是使用对象字面量的方法,其字面量里可以包含大量的属性和方法。
要扩展该对象,可以添加自己的私有成员和方法,然后使用闭包在其内部封装这些变量和函数声明。样例代码如下:
二、工厂模式
工厂模式是由一个方法来决定到底要创建哪个类的实例,而这些实例经常都拥有相同的接口。
这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况。
实例:
这段代码来自es5的new和构造器的相关说明, new本身只是一个对象的复制和改写过程, 而具体会生成什么是由调用ObjectFactory时传进去的参数所决定的。
三、 适配模式
适配模式主要是为了解决一些接口不兼容产生的解决方法。
适配器可以在不修改这些不兼容接口的情况下给使用者提供统一的包装过的适配接口。
表面上又感觉和之前的门面模式比较像,均是对其他对象或者接口进行包装再呈现,而适配器模式偏向的是解决兼容性问题,门面模式则偏向方便性为原则。
比如一个简单的学生查询学科成绩的方法:
这是一个关于适配器来处理参数方面兼容的形式。
适配器模式意义上很简单 - 适配,解决兼容问题。
例子二:jquery里边的$选择器需要改成$id才能和项目搭配,将$转换成$id就很轻松了。如下:
四、外观模式
外观模式,是一种相对简单而又无处不在的模式。
外观模式提供一个高层接口,这个接口使得客户端或子系统更加方便调用。
用一段再简单不过的代码来表示:
单例模式都用在什么地方?能举几个例子吗
单例模式在编程中起到控制类实例数量的作用,确保某个类只有一个实例存在。
广泛应用于各种场景,比如线程池、缓存、日志、对话框、打印机和显卡驱动等资源管理器。
通过单例模式,可以实现资源的有效管理和合理利用。
例如,打印机在计算机上可能有多个,但Printer Spooler作为资源管理器只能有一个,防止两个打印作业同时输出到同一打印机。
此外,通信端口在系统中也需集中管理,避免同一端口被两个请求同时调用,以提高系统效率和稳定性。
详细讲解23种设计模式
工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定要实例化的类是哪一个。
工厂方法把对象的实例化推迟到子类。
例如:代码示例:抽象工厂模式是一种创建型设计模式,它提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体类。
具体示例如下:单例模式确保一个类只有一个实例,并提供全局访问点。
实现方法如下:建造者模式是一种创建型设计模式,它可以将一个复杂对象的构建过程和它的表示分离,使得同样的构建过程可以创建不同的表示。
下面是一个例子:原型模式是一种创建型设计模式,它允许通过复制现有对象来创建新对象,而不是通过实例化的方式。
例如:适配器模式是一种结构型设计模式,它可以将一种类的接口转换成客户端希望的另一种接口。
适配器模式允许接口不兼容的类能够合作。
具体示例如下:桥接模式是一种结构型设计模式,它可以将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构,从而能在开发时分别使用。
具体示例如下:组合模式是一种结构型设计模式,它允许将对象组合成树形结构来表现整体-部分关系。
组合能让客户端统一处理单个对象和对象组合。
实现方法如下:桥接模式和组合模式在代码示例中分别进行了说明。
外观模式为复杂的子系统提供简单的接口,从而使子系统更易于使用。
具体示例如下:享元模式是一种结构型设计模式,它通过共享尽可能多的数据来最小化内存使用和计算开销。
具体示例如下:代理模式为其他对象提供一种代理以控制对这个对象的访问。
具体示例如下:命令模式是一种行为型模式,它通过将请求封装为一个对象来实现请求的发送者和接收者之间的解耦。
具体示例如下:责任链模式是一种行为型设计模式,它通过将请求的发送者和接收者解耦,使多个对象都有机会处理这个请求。
具体示例如下:迭代器模式是一种行为型设计模式,它可以在不暴露集合底层表现形式的情况下遍历集合中所有的元素。
具体示例如下:中介者模式用于降低多个对象之间的通信复杂性。
具体示例如下:备忘录模式用于保存一个对象的状态,以便在以后可以恢复到该状态。
具体示例如下:观察者模式用于在对象结构中实现对象之间的动态连接和通信。
具体示例如下:状态模式是一种行为型设计模式,它允许对象在内部状态发生改变时改变它的行为。
具体示例如下:策略模式是一种行为设计模式,它允许在运行时选择算法的行为。
具体示例如下:模板方法模式在抽象类中定义了一个算法的骨架,而将一些步骤延迟到子类中实现。
具体示例如下:访问者模式允许定义算法的接口,而不改变对象结构的实现。
具体示例如下: