美文网首页
设计模式之单例模式

设计模式之单例模式

作者: Separes | 来源:发表于2017-02-13 15:08 被阅读11次

    设计模式:用于在特定的条件下为一些重复出现的软件设计问题提供合理的、有效的解决方案。

    软件模式与具体的应用领域无关,也就是说无论你从事的是移动应用开发、桌面应用开发、Web应用开发还是嵌入式软件的开发,都可以使用软件模式。

    单例模式:

    • 目的:
      确定对象的唯一,并且不可复制,所有的操作都是基于当前的唯一对象,为了确定对象的唯一性所以使用单例模式。

    • 优点:

    单例模式提供了对唯一实例的受控访问。因为单例类封装了它的唯一实例,所以它可以严格控制客户怎样以及何时访问它。
    由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。
    允许可变数目的实例。基于单例模式我们可以进行扩展,使用与单例控制相似的方法来获得指定个数的对象实例,既节省系统资源,又解决了单例单例对象共享过多有损性能的问题。

    • 适用场景:

    系统只需要一个实例对象,如系统要求提供一个唯一的序列号生成器或资源管理器,或者需要考虑资源消耗太大而只允许创建一个对象。
    客户调用类的单个实例只允许使用一个公共访问点,除了该公共访问点,不能通过其他途径访问该实例。

    final class Singleton
    {
    /**
     * 唯一实例。
     *
     * @var Singleton
     */
    private static $instance;
    
    /**
     * 通过延迟加载(用到时才加载)获取实例。
     *
     * @return self
     */
    public static function getInstance()
    {
        if (null === static::$instance) {
            static::$instance = new static();
        }
    
        return static::$instance;
    }
    
    /**
     * 构造函数私有,不允许外部实例化。
     */
    private function __construct()
    {
    }
    
    /**
     * 克隆对象,不允许外部调用。
     *
     * @return void
     */
    private function __clone()
    {
    }
    
    /**
     * 防止被反序列化。
     *
     * @return void
     */
    private function __wakeup()
    {
    }
    }

    相关文章

      网友评论

          本文标题:设计模式之单例模式

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