该模式属于创建型模式
单例模式:一个类只能创建出一个对象。
单例模式代码如下:
<?php //单例模式:一个类只能创造出一个对象 /*实现单例,必须满足以下条件: 1.不让克隆(私有化克隆魔术方法) 2.不让创建对象(私有化构造方法),不能在类外部使用new关键字创建对象。 3.进入到类中,创建对象(静态方法) 4.要在类中使用静态属性来保存已经产生的对象,用于判断 */ /*单例模式:满足三私一公 三私:私有构造方法,私有克隆方法,私有静态属性 一公:公共静态方法(产生对象) */ class Single { private $name; private static $single; //定义一个静态属性用来保存实例化后的对象 //私有化构造方法 让对象不能在外部被创建 就是不能在外部new Single这个类 private function __construct($key) { $this->name = $key; } //私有化克隆方法 让对象不能在外部被克隆 private function __clone(){ } //静态方法 让类进入到类的内部实例化得到对象 public static function get_instance($name) { //判断对象是否已经存在 如果存在直接返回已有对象 否则创建一个新对象 if(self::$single) { //对象已存在 直接返回已经存在的对象 return self::$single; } else { //对象不存在 创建对象保存到定义好的静态属性中保存 并返回 return self::$single = new Single($name); } } } $res = Single::get_instance('zyl'); var_dump($res); $res2 = Single::get_instance('hxf'); var_dump($res2); //最终输出结果都是: zyl hxf没有被输出 这样就实现了单例模式 /*单例模式优点? 1.改进系统的设计 2.只能创建一个对象,能够节省资源(内存) 单例模式的缺点? 1.难于调试 2.隐藏的依赖关系 3.无法用错误类型的数据覆写一个单例 */ ?>
声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。
精彩评论