设计模式不是针对框架,而是针对某些问题和某些需求提出的,因此具有广泛的适用性。
我们学习设计模式不仅要学习理论,还要学习如何解决实际工作中的问题,所以面试中通常会根据不同的需求来考察设计模式。
1、什么是设计模式?
设计模式总结了重复使用、分类编目的代码设计经验。
2、设计模式有哪些?
GOF提出的23种设计模式分为三大类。
创建型模式共有5种,分别为工厂方法模式、抽象工厂模式、单例模式、建设者模式、原型模式。
结构模式有适配器模式、装饰器模式、代理模式、外观模式桥接模式、组合模式、元模式7种。
行动型模式共计11种,分别为策略模式、模板方法模式、观察员模式、代理选择模式、责任链接模式、指令模式、备忘录型杀、状态模式、访问者模式、中介者模式、解释器模式
在前端开发中,某些模型可能不太适用。 当然,某些应用于前端的模型不包括在委托模式、节流模式等23种设计模式中。
3、你用过哪些设计模式?
工厂模式。
其优点是可以使用工厂方法而不是new关键字来消除对象之间的联接。 同时,封装所有实例化的代码,实现代码的重复。 工厂模式解决了重新创建对象的问题。
功能工厂(name,age ) {var user=new Object; user.name=name; 用户age=age; user. getIntro=function () return this.name '' sage is ' this.age; }返回用户; var XM=工厂(Xiaoming ),20 ); 控制台. log (XM.get intro ()/Xiaoming ' sage is 20http://www.Sina.com /
其概念如下
工厂模式需要三个基本步骤,包括下料、加工过程及成品出厂,如以下代码:
功能播放器工厂(username ) {var user=new object ); user .username=username; 返回用户; }varxm=player Factory(Xiaoming ) ) playerfactory函数传递的参数为“基本配料投放”。 从var user=new Object ()到return属于“加工工艺”。 最后一次返回就像“成品发货”。
4、工厂模式的概念是什么?
缺陷如下
)1)没有使用new关键字,在创建对象的过程中看不到构造函数实例化的过程。
)为每个实例化对象创建适当的变量和函数,需要大量空间来存储属性和方法,这会降低性能并浪费资源。
5、工厂模式的缺陷是什么?
经典的MVC体系结构包括模型(模型)、视图)和控制器三个部分。 控制器可以访问和更新视图。 控制器可以访问模型并更新数据。 视图可以访问模型并获取数据渲染页面。
MwVM体系结构包括三个部分:模型(模型)、视图)和视图模型。 视图模型负责视图和模型之间的信息转换,并通过双向绑定传输视图和模型之间的数据。
style="text-align: left">例如代表性的框架 Angular,它通过数据绑定,将模型中的数据映射到视图中,通过事件监听器( event listener),将视图改变的数据存储在模型内7、什么是事件代理?
事件代理( Event Delegation)又称为事件委托,是 JavaScript中常用的绑定事件的方式。动听的发带,“事件代理”就是把原本需要绑定到子元素的事件委托给父元素,让父元素承担事件监听的工作。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好处有很多,如减少事件数量,预测未来元素,避免内存外泄等,有利于提高性能。
8、请说说工厂模式的优缺点。
优点如下。
(1)一个调用者想创建一个对象,只要知道它的名称即可。
(2)扩展性高,如果想增加一个产品,只要扩展一个工厂类即可。
(3)屏蔽产品的具体实现,调用者只需关心产品的接口。
缺点如下。
每次增加一个产品时,都需要増加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。
9、单例模式的优缺点是什么?
优点如下。
(1)提供了对唯一实例的受控访问。
(2)由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象,单例模式无疑能够提高系统的性能。
(3)可以根据实际情况的需要,在单例模式的基础上扩展为双例模式和多例模式。
缺点如下。
(1)单例类的职责过重,里面的代码可能会过于复杂,在一定程度上违背了“单职责原则”。
(2)如果实例化的对象长时间不利用,系统会认为它是垃圾而进行回收,这将导致对象状态的丢失。
10、使用工厂模式最主要的好处是什么?
好处如下:
(1)把对象的创建集中在一个地方(工厂),在增加新的对象类型的时候,只需要改变工厂方法。当不使用工厂模式的时候,改变创建方式则需要四处修改,增加维护成本。
(2)新的对象类型可以很容易地添加进来。
(3)只需要关心工厂方法返回的对象,不必关心具体创建的细节。
11、什么是代理模式?
代理( proxy)模式,即为目标对象指定代理对象,并由代理对象代替目标对象控制客户端对目标对象的访问。
12、原型模式和单例模式的区别是什么?
单例模式就是保证一个类只存在一个实例,只初始化一次,第一次完成初始化以后,在重复使用的时候,返回的都是这个实例,而不是新建一个实例。如果实例化的对象里面的属性值已经改变,就不能用单例了,只能通过原型模式重新实例化,原型模式允许多次创建实例对象。
13、组合模式的适用性指的是什么?
组合模式是表示对象的“部分-整体”层次结构的一种设计模式;组合模式将对象组合成树状结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。
14、什么时候要使用组合模式?
在以下情况下使用组合模式
(1)当想表示对象的“部分-整体”层次结构(树状结构)时可以使用组合模式
(2)在希望用户忽略组合对象与单个对象的不同并且统一地使用组合结构中的所有对象时使用组合模式。
15、设计模式都有哪些问题?
设计模式可以让你用前人总结的经典场景来分析实现某些功能时需要什么角色如何合理地设置接口、提高系统各个层次的独立性、降低耦合度等。然而,这也不是绝对的。不论是设计模式、还是开发框架,都是为了有效开发而出现的,但常常出现“杀鸡用牛刀”的情况,所以学的时候最好要多对比,从不同角度理解与测试,不能照搬书中的内容,这不是设计模式的精髓。
16、你在开发中都用到了哪些设计模式?它们的作用分别是什么?
毎个模式都描述了一个在开发环境中不断岀现的问题,然后描述了该问题的解决方案。用这种方式,可以无限次地使用那些已有的解决方案,无须再做重复、相同的工作。
开发中常用到的模式如下。
singleton:单例模式,用来减少重复创建对象。
factory:工厂模式,用来解耦。
iterator:迭代器模式,用来遍历对象。
observer:观察者模式,用来收发消息。
templete:模板模式,用来避免执行相同的操作。
strategy:策略模式,用来定义算法等。
本文完~
相关推荐
【前端面试题】01—42道常见的HTML5面试题(附答案)
【前端面试题】02—59道CSS面试题(附答案)
【前端面试题】03—200+道常见JavaScript基础面试题上(附答案)
【前端面试题】04—33道基础CSS3面试题(附答案)
【前端面试题】 05—17道面向对象的面试题(附答案)