美文网首页
单例模式如何保证实例的唯一性

单例模式如何保证实例的唯一性

作者: yeshan333 | 来源:发表于2024-03-27 10:34 被阅读0次

    前言

    无知.jpg

    什么是单例模式

    • 指一个类只有一个实例,且该类能自行创建这个实例的一种创建型设计模式。
    • 使用目的:确保在整个系统中只能出现类的一个实例,即一个类只有一个对象。对于频繁使用的对象,“忽略”创建时的开销。
    • 特点:
      • 单例类只有一个实例对象;
      • 该单例对象必须由单例类自行创建;
      • 单例类对外提供一个访问该单例的全局访问点;

    如何保证实例的唯一性

    那么,如何保证实例的唯一性?

    Java 的解决方案之一

    对于 Java 来说,要确保类的构造方法是私有的,使用 static final 的私有成员变量存放这个唯一实例。我们还要提供一个获取实例的接口(由于我们要通过类名获取实例,所以接口方法是 static 的)。实现如下:

    public class Singleton {
        private static final Singleton instance=new Singleton();
        private Singleton() {}
        public static Singleton getInstance() {
            return instance;
        }
    }
    

    我们知道,对于 static 的变量,类所有的实例都可以共享这个变量,我们可以直接通过类名来访问它。再使用 final 修饰这个变量,使得它不能再被改变。

    戳此处深入了解 →

    Python 的解决方案之一

    以下为 Python 使用装饰器实现的单例模式。这里将不可变的类地址存放在了 dict 中,值为那个唯一的实例。

    def Singleton(cls):
        _instance = {}
    
        def getInstance(*args, **kwargs):
            if cls not in _instance:
                _instance[cls] = cls()
            return _instance[cls]
        return getInstance
    
    @Singleton
    class test_singleton:
        def __init__(self):
            pass
    
    def main():
        class1 = test_singleton()
        class2 = test_singleton()
        print('class1 id: {}, class2 id: {}'.format( id(class1), id(class2)))
        print(class1 == class2)
    
    main()
    
    # class1 id: 1814844368152, class2 id: 1814844368152
    # True
    

    参考

    本文由博客群发一文多发等运营工具平台 OpenWrite 发布

    相关文章

      网友评论

          本文标题:单例模式如何保证实例的唯一性

          本文链接:https://www.haomeiwen.com/subject/rrqytjtx.html