软件设计模式在JavaScript中的应用
2010-09-14 13:32:10 来源:WEB开发网function Singleton(){
if(Singleton.caller!=Singleton.getInstance){
throw new Error(”Can not new Singleton instance!”);
}
…………
}
这样当用户试图自己创建多个对象的时候,通过人工抛出异常来阻止。不过这么做你感觉是不是还是有一点别扭?创建单例就创建单例吧,干嘛非要抛出一个异常呢?但无论如何,使用上述方案已经能够实现了仅能创建类的单例的目的。
下面,我们来讨论第三种方法(也是最优秀的方法)。这种方法巧妙利用了JavaScript对于“匿名”函数的支持特征来间接实现禁止对Singleton类构造函数的访问,从而较好地模拟了私有构造函数的特性,最终比较完美地解决了用JavaScript实现Singleton模式的问题。
列表2:借助于“匿名”函数的支持在JavaScript中创建Singleton模式类
<script type="text/javascript">
(function(){
//SingletonFactory Interface
SingletonFactory = {
getInstance : getInstance
}
//private classes
function SingletonObject()
{
SingletonObject.prototype.methodA = function()
{
alert('methodA');
}
SingletonObject.prototype.methodB = function()
{
alert('methodB');
}
SingletonObject.instance = this;
}
//SingletonFactory implementions
function getInstance()
{
if(SingletonObject.instance == null)
return new SingletonObject();
else
return SingletonObject.instance;
}
})();
var instA = null;
try
{
alert("试图通过new SingletonObject()构造实例!");
instA = new SingletonObject();
}
catch(e){
alert("SingletonObject构造函数不能从外部访问,系统抛出了异常!");
}
instA = SingletonFactory.getInstance(); //通过Factory上定义的静态方法获得
var instB = SingletonFactory.getInstance();
instA.methodA();
instB.methodA();
alert(instA == instB); //成功
</script>
Tags:软件 设计模式 JavaScript
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接