前言:半年前看高程的时候看到设计模式这章,云里雾里,不是看不明白,而是不明白为啥要如此麻烦只为创建一个对象。直到最近完成了自己第一个小项目,才体会到当代码量多起来时没有适当的规范与限制是多么大的灾难。于是重新翻开高程,总结下几种我学到的简单设计模式的优劣。
正文:本文一共介绍7种设计模式以及他们的应用场景、优劣。
1.工厂模式
直接用函数来封装对象,将对象作为返回值。
缺点:对象识别的问题,所有创建出的对象都是Object的实例,不好区分。
2.构造函数模式
优点:运用构造函数模式可以将实例标示为一种特定的类型。
缺点:创建的对象的方法都是私有的,如果只是想产生公用的方法,会造成不必要的性能浪费。
3.原型模式
利用原型链继承
缺点:所有属性和方法被实例共享。当属性、方法中包含引用类型的值时,修改一个实例的属性、方法会影响所有其他实例。
4.原型+构造函数模式
私有属性、方法用构造函数产生,公有属性、方法用原型来继承。融合两种方法的优点。
缺点:注意引用类型值的原型继承。
ps:上图代码重写了Person构造函数的原型对象,将原型对象指针指向了一个对象,所以constructor属性此时指向Object而不是Person,所以要显式的将其设置成Person。
5.动态原型模式
本质上还是构造函数,只在指定方法不存在时在原型对象中添加他。
缺点:不能使用对象字面量重写原型对象。因为这会使实例的指针指向新的原型对象。也就是说上图中原型对象中添加的sayName方法会失效。
6.寄生构造函数模式
调用时使用new操作符,除此以外我看不出和工厂模式有什么区别。望高人指点。
7.稳妥构造函数模式
没有公共属性,禁用this,仅暴露必须的API用于数据调用。适用于对安全有需求的领域。
如上代码,只能通过sayName方法才能访问到内部的name属性。
本文给大家介绍了七种设计模式,分别介绍了他们的优缺点,希望对学习js设计模式相关知识有所帮助。
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com