美文网首页
单例模式

单例模式

作者: ningsiy | 来源:发表于2018-09-18 17:23 被阅读0次

    设计模式初学,如有不足之处,还望指正。

    介绍

    单例模式是常见的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

    注意

    • 单例类只能有一个实例
    • 单例类必须自己创建自己的唯一实例
    • 构造函数是私有的

    实现(php)

    <?php
    
    /**
     * 单例模式
     * Class Singleton
     * ningsiy
     */
    
    class Singleton
    {
        private static $_instance = null;
    
        /**
         * 防止在外部实例化对象
         * Singleton constructor.
         */
        private function __construct(){
            echo 'Singleton()的实例化对象<br/>';
    
        }
    
        /**
         * 实例化
         * @return null|Singleton
         */
        static public function getInstance(){
            if (is_null(self::$_instance)){
                self::$_instance = new Singleton();
            }
            return self::$_instance;
        }
    
        /**
         * 阻止在外部克隆对象
         */
        private function __clone()
        {
            // TODO: Implement __clone() method.
        }
    }
    
    $sin1 = Singleton::getInstance();
    $sin2 = Singleton::getInstance();
    
    if ($sin1 === $sin2){
        echo '同一实例化对象';
    }else{
        echo '不同的实例化对象';
    }
    

    python 实现

    # 单例模式  ningsiy
    class Singleton(object):
    
        def __new__(cls, num):
            if not hasattr(cls, '_instance'):
                cls._instance = super().__new__(cls)
            return cls._instance
    
    
    if __name__ == '__main__':
        class SingleTest(Singleton):
            def __init__(self, s):
                self.s = s
    
            def __str__(self):
                return self.s
    
    
        test1 = SingleTest('Test')
        print(test1)
        test2 = SingleTest('ttttt')
        print(test2)
        print(test1)
    

    相关文章

      网友评论

          本文标题:单例模式

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