惰性单例是指需要的时候才创建对象实例。在实际开发中非常有用。
例如创建一个弹窗 元素 iframe等等;
//html代码
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>惰性单例</title>
<script type="text/javascript" src="demo.js"></script>
</head>
<body>
<button id='signIn'>登录</button>
<button id="cIframe">创建iframe</button>
</body>
</html>
//js
window.onload = function(){
var getSingle = function(callback){
var result;
return function(){
return result || (result = callback.apply(this,arguments));
//[object HTMLDivElement]
}
}
var cElement = function(){
var div = document.createElement( 'div' );
div.innerHTML = '我是新创建的div';
div.id = 'newDiv';
div.style.display = 'none';
document.body.appendChild(div);
return div;
}
var createSingleDiv = getSingle(cElement);
document.getElementById('signIn').onclick = function(){
var div = createSingleDiv();
div.style.display = 'block';
}
//再试试创建唯一的iframe
var cIframe = function(){
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
return iframe;
}
var createsingleIframe = getSingle(cIframe);
document.getElementById('cIframe').onclick = function(){
var iframe = createsingleIframe();
iframe.src='http://baidu.com';
}
}
在这个例子中,创建对象的职责和管理单例的职责分别放在两个方法 cELement()、getSingle()
这两个方法独立变化互不影响,连在一起使用,就完成唯一的实例对象功能