PHP设计模式:单例模式

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

实现单例模式所要考虑的问题:

  • 01

    问题1:只能有一个实例,new是罪恶的根源,想办法让外部不能new如何解决? 解决方法:通过将构造方法,保护或私有化,外部即不能生成实例了。

  • 02

    问题2:不能new了,那不成0例模式了吗?那总得想办法生成一个实例吧? 解决方法:既然在外部不能new了,内部可以new啊,所以决定在内部通过静态方法new一个实例。

  • 03

    问题3:现在有实例了,但外部每次调用静态方法生成实例,都不是一个对象。  如何防止呢? 解决方法:在内部将这个实例保存下来,并做判断。

  • 04

    问题4:如果继承一下,通过子类new对象,每次生成的都不是同一个对象了,如何解决? 解决方法:利用关键字“final“修饰生成实例的方法即可。

  • 05

    问题5:在外部通过clone函数克隆一个对象,此对象又发生了变化,如何解决? 解决方法:利用__clone魔术方法 解决此问题。

    参考代码

    • 01

      <?php class single{ static public $object = null; protected function __construct(){ } final static function NewOb(){ if (self::$object instanceof self) { return self::$object; } self::$object = new self(); return self::$object; } public function __clone(){ echo "想克隆没门<br />"; } } $t1 = single::NewOb(); $t2 = single::NewOb(); $t3 = clone $t2; if ($t1 === $t2) { echo '是一个对象<br />'; }else { echo '不是一个对象<br />'; } if ($t3 === $t2) { echo '是一个对象<br />'; }else { echo '不是一个对象<br />'; } ?>

    (0)

    相关推荐

    • java单例模式在什么地方使用呢?

      当你阅读其他程序时,或者翻阅java API时,都会不经意间发现这个设计模式,单例模式在程序中用处非常大,可以这么说吧.好点的程序设计中,应该都会有它的身影出现的.那么什么是单例模式呢? 操作方法 0 ...

    • 什么是单例模式?单例模式有什么要求?

      单例模式介绍 操作方法 01 1.单例模式的理解: 单例模式是一种设计模式,是指一个类仅仅能有一个实例. 02 2.单例模式有什么要求? ①.私有的构造方法:例如有一个Apple类,则 public  ...

    • j2ee 常用的设计模式?

      操作方法 01 Java 中的23种设计模式: Factory(工厂模式),  Builder (建造模式),  Factory Method (工厂方法模式), Prototype (原始模型模式) ...

    • 如何做帮助用户做决策的设计模式?

      如今,许多应用会基于用户的个人数据对其偏好做出假设,如Google Now,Spotify和Amazon等.它们甚至可能提前替我们做决定,而不需要我们做任何主动的信息输入.譬如Facebook的订阅新 ...

    • 视觉交互都必须知道的交互设计模式

      很多人在这个信息爆炸的移动时代,更想看到一些所谓的"干货",干货到底是什么,可以直接拿来上手的是干货吗?还是需要你经过判断和思维转化再处理得到的属于自己的启发?本篇交互模式大家可以 ...

    • 常见的移动端设计模式与案例分析

      良好的APP导航设计模式决策对整个app的核心体验起到关键作用.我们通过案例来对比和了解一些常用的APP导航设计模式. 在移动端,导航是APP最重要的区别.根据不同的内容,选择不同的导航方式.没有完美 ...

    • 五种PHP设计模式

      php是一种简单易学的程序语言,关于使用php编程时的设计模式,今天向大家介绍一下.这将比较利于编程. 步骤/方法 01 工厂模式 工厂模式 是一种类,它具有为您创建对象的某些方法.您可以使用工厂类创 ...

    • 设计模式有哪儿六大原则

      很多人应该听说过设计模式(Design pattern),又或多或少的看过或用过设计模式,但是实际用在开发过程中总有点心有余而力不足的感觉.那肯定是对设计模式的理解有少许偏差或者不够深入. 操作方法 ...

    • 采用单例模式还是静态方法好呢?

      操作方法 01 在真正的开发项目的过程中,使用单例模式好呢,还是使用静态方法好呢,具体情况具体分析,大体可以分一下观点: 观点一:(单例)单例模式比静态方法有很多优势:首先,单例可以继承类,实现接口, ...