使用闭包创建“单例模式”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用闭包创建“单例模式”相关的知识,希望对你有一定的参考价值。

参考技术A 单例的好处:单例只会被创建一次,所以不用担心在构造函数里声明了多少个成员。

单体的创建结构:

(function()

 return ;

)()

我们可以把公用成员添加到单体返回的那个对象中。

例如:

MyNamespace.Singleton = (function()

      return

            publicAttribute1:true,

            publicAttribute2:10,

            publicMethod1:function();

            publicMethod2:function();

     

)()

优点:这个包装函数创建了一个可以用来添加真正的私有成员的闭包。任何声明在这个匿名函数中(但不在这个返回的对象字面量中)的变量或函数都能被在同一个闭包中声明的其他函数访问。

在单例模式中,你可以享受到真正的私用成员带来的所有好处,而不必付出什么代价,这是因为“单例模式”只会被实例化一次。

对于资源密集型或者配置开销甚大的单体,也许更合理的做法是将其实例化推迟到需要使用它的时候。

python中单例模式的实现-通过闭包函数和魔术方法__new__实现单例模式

1、通过闭包函数实现单例模式:

# 使用闭包函数实现单例
def single(cls, *args, **kwargs):
    instance = {}

    def get_instance():
        if cls not in instance:
            instance[cls] = cls(*args, **kwargs)
        return instance[cls]
    return get_instance


@single
class Apple:
    pass


a = Apple()
b = Apple()
print(id(a))
print(id(b))

2、通过python中魔术方法__new__实现单例模式:

class Single:
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, _instance):
            cls._instance = super(Single, cls).__new__(cls)
        return cls._instance


s1 = Single()
s2 = Single()
print(id(s1))
print(id(s2))

以上是关于使用闭包创建“单例模式”的主要内容,如果未能解决你的问题,请参考以下文章

前端设计模式之单例模式

js 单例模式

js 单例模式

单例模式

设计模式——单例模式

设计模式——单例模式