设计模式的定义是:在面向对象软件设计过程当中针对特定问题的简洁而优雅的解决 方案,通俗一点说,设计模式是在某种场合下对某个问题的一种解决方案。若是再通俗一点说,设计模式就是给面向对象软件开发中的一些好的设计取个名字。也就是说设计模式并不难,而只是一些目前公认的解决某些问题的最佳实现而已。设计模式
单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点。例如:线程池,全局缓存,浏览器window对象等,这些都只须要一个对象实例就足够了。浏览器
要实现单例模式也并不复杂,只要用一个变量来标识是否已经给某个类建立过实例,若是是,则在下一次获取该类的实例的时候,直接返回已经缓存好的实例, 不然建立并缓存这个实例。缓存
1.单例模式实现一bash
// 单例模式实现一
function SingleTon(name) {
this.name = name;
this.instance = null;
}
SingleTon.prototype.getName = function() {
return this.name;
}
SingleTon.getInstance = function(name) {
if (this.instance) {
return this.instance;
}
return new SingleTon(name);
}
复制代码
// 单例模式实现二, 利用闭包
function SingleTon2(name) {
this.name = name;
}
SingleTon2.getInstance = (function(){
let instance = null;
return function(name) {
if (!instance) {
instance = new SingleTon2(name);
}
return instance;
}
})();
复制代码
// 实现三 类
class SingleTon3 {
constructor(props) {
const { name, ...other } = props;
this.name = name;
this.instance = null; // 标识是否已经建立过实例
}
setName = () => {
return this.name;
}
static getInstance = (name) => {
this.instance = this.instance ? this.instance : new SingleTon3(name);
return this.instance;
}
}
const t1 = SingleTon3.getInstance('timo1');
const t2 = SingleTon3.getInstance('timo2');
console.log('t1 => ',t1); // timo1
console.log('t2 => ',t2); // timo1
console.log('t1 === t2 => ',t1 === t2); // true
复制代码
注意: 类(class)经过static关键字定义静态方法。不能在类的实例上调用静态方法,而应该经过类自己调用。这些一般是实用程序方法,例如建立或克隆对象的功能闭包
4.衍生, 使用闭包来封装私有变量ui
// 使用闭包来封装私有变量
const user = (function() {
let name = 'timo';
let age = 22;
return {
getUserInfo: function() {
return name + ' '+ age;
}
};
})();
复制代码
特别注意:let 和 const 声明并不会绑定到全局的window对象上!!!而使用var声明会自动绑定到windowthis
单例模式是一种简单但很是实用的模式,特别是惰性单例技术,在合适的时候才建立对象,而且只建立惟一的一个。spa