什么是设计模式:
设计模式的原则是找出程序中的变化,并将变化封装起来,实现高效的可复用性。核心在于意图,而不在结构。通过设计模式可以帮助我们增强代码的可重用性、可扩充性、 可维护性、灵活性。我们使用设计模式的最终目的是为了实现代码的高类聚和低耦合。你是否思考过这样的一个问题,如何让代码写的更有健壮性,其实核心在于把握变与不变。确保变的部分更加灵活,不变的地方更加稳定,而使用设计模式可以让我们达到这样的目的。
下面来总结一下vue项目中或者说工作中常用的设计模式。
单例模式
单例模式:确保一个类只有一个实例对象,并提供一个全局访问点供其访问。
优点:适用于单一对象,只生成一个对象实例,避免频繁创建和销毁实例,减少内存占用。
缺点:不适用动态扩展对象。
场景:登录浮窗、Vue中的axios实例(我们对axios进行请求拦截和响应拦截,多次调用封装好的axios但是仅设置一次,封装好的axios导出就是一个单例)、全局态管理 store、线程池、全局缓存
function Person (name, age) {
this.name = name
this.age = age
this.info = function () {
console.log(`我的名字叫${
this.name}, 我今年${
this.age}了`)
}
}
Person.getInstance = function (name, age) {
if (!this.instance) {
this.instance = new Person(name, age)
}
console.log(this.instance)
return this.instance
}
let b1 = Person.getInstance('单例1', 18)
let b2 = Person.getInstance('单例2', 18)
b1.info()
b2.info()
工厂模式
工厂模式:工厂模式是用来创建对象最常见的一种设计模式。不必暴露构造函数的具体逻辑,而是将逻辑封装在一个个函数之中,那么这个构造函数就可以被看做工厂。
场景: 有构造函数的地方,写了大量的构造函数代码,调用了大量的new操作符。
优点:通过工厂模式,我们可以快速创建大量相似对象,没有重复代码。
缺点:工厂模式创建的对象属于Object,无法区分对象类型,这也是工厂模式没有广泛使用的原因。
function Factory (name, age) {
this.name = name;
this.age = age;
// 或者
// let obj = {}
// obj.name = name
// obj.age = age
// return obj
}
Factory.prototype.