码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式

时间:2020-01-29 19:43:47      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:判断   保护   思想   方式   允许   属性   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!