标签:判断 保护 思想 方式 允许 属性 instance vat 设计思想
思考:有一种需求,希望一个类有且只能有一个对象,这样保证对象的完整性,请问该如何实现呢?
引入:我们将这种一个类最多只能一个对象称为单例,在操作系统中这种方式需求很多,如任务管理器,而通过代码实现这中单例的设计思路我们称为单例模式
定义:单例模式singleeton,是一种类的设计只会最多产生一个对象的设计思想
<?php class singglelon{ //设置属性来保存对象 private static $object=null; //构造方法系优化 不允许在外部实例化 private function __construct(){ echo __METHOD__; } public static function getinfo(){ // 判断对象 instanceof 是判断一个对象是否属于这个类的 或者子类 // 当前保存的object 不是singglelon对象 if(!self::$object instanceof self){ // 产生对象 self::$object=new self; } // 返回对象 return self::$object; } } $s1=singglelon::getinfo(); //返回同一个对象 var_dump($s1); $s2=singglelon::getinfo(); //返回的是同一个对象 var_dump($s2); ?>
以上方法可以保证无论多少次调用共有静态方法获取实例,都会只能得到一个对象,但是此时外部对象依然可以产生新的对象,因为克隆,所以还必须禁止对象的克隆
即在类内部私有化克隆方法。
private function __clone(){ }
$s3 =clone $s2; //克隆报错 var_dump($s3);
总结
1.单例模式就是设计的类最多只能得到一个对象
2.私有化构造方法,禁止在类外无限实例化对象
3.私有化克隆方法,禁止对象无线克隆对象
4.私有化静态属性,保存类内部实例化得到的对象
5.公有化静态方法,允许外部通过调用类内部方法获取对象
单例模式如果还有其他功能诉求,可以在类中增加相应的其他类成员
单例模式的目的是为了保护资源唯一性。
标签:判断 保护 思想 方式 允许 属性 instance vat 设计思想
原文地址:https://www.cnblogs.com/xiaowie/p/12241049.html