美文网首页
【抄书】设计模式||单例模式

【抄书】设计模式||单例模式

作者: hdormy | 来源:发表于2022-01-07 17:29 被阅读0次

【例子均采用php】

单例,顾名思义,只能实例化一次。

那怎样才能保证类只被实例化一次呢?那就要看影响类实例化的因素了。

首先,你不想你的类被别人随意实例化,你就得用构造函数来管控,用构造函数,把你的类藏起来,不让别人看到,他还能new?


class Single

{

    private function __construct(){

        echo "我是单例";

}

}


new它!是不是得到这个错误啦?

Fatal error: Uncaught Error: Call to private Single::__construct() from invalid context in D:\www\single.php:18 Stack trace

完了!不能被new的类,你拿着有什么用?

嘿嘿,自己的东西,就自己想用呗,咱关起门来自己new:


class Single

{

    private function __construct(){

echo "我是单例";

}

    public static function instance ()

{

        return new self();

}

}


现在Single::instance (); 浏览器输出:我是单例

可是,有没有发现一个问题,此时,我每调用一次instance 方法,它还是会去实例化一次,那这个单例就没起作用呀!怎么办呢?别着急,且看我把它实例化次数给限制咯:


class Single

{

    private static $instance;

    private function __construct(){

echo "我是单例";

}

    public static function instance ()

{

          //此处加判断

          if(!self::$instance instanceof self) {

              self::$instance = new self;

          }

return self::$instance;

}

}


现在,无论你调用多少次Single::instance (); 是不是只会输出一个“我是单例”?

你以为这样就可以睡大觉了?克隆羊多利死了,还有无数个克隆类!为了防止我们实例化的对象被克隆,我们还要把克隆通道给它关咯!


class Single

{

    private static $instance;

    private function __construct(){

echo "我是单例";

}

    public static function instance ()

{

//此处加判断

          if(!self::$instance instanceof self) {

self::$instance = new self;

}

return self::$instance;

}

    private function __clone(){}

}


现在,单例才真的完成!

口口相传的“三私一公”:私有化构造函数,防止任意实例化类;私有化属性,存放实例化的对象,控制实例化次数;私有化克隆方法,防止对象被任意复制;公开的静态方法,供外部调用。

相关文章

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • 【抄书】设计模式||单例模式

    【例子均采用php】 单例,顾名思义,只能实例化一次。 那怎样才能保证类只被实例化一次呢?那就要看影响类实例化的因...

  • python中OOP的单例

    目录 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 单例

    目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 设计模式 - 单例模式

    设计模式 - 单例模式 什么是单例模式 单例模式属于创建型模式,是设计模式中比较简单的模式。在单例模式中,单一的类...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • python 单例

    仅用学习参考 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计...

  • 基础设计模式:单例模式+工厂模式+注册树模式

    基础设计模式:单例模式+工厂模式+注册树模式 单例模式: 通过提供自身共享实例的访问,单例设计模式用于限制特定对象...

  • 单例模式

    JAVA设计模式之单例模式 十种常用的设计模式 概念: java中单例模式是一种常见的设计模式,单例模式的写法...

网友评论

      本文标题:【抄书】设计模式||单例模式

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