面向对象——单例模式总结

(1)一般是用静态变量,初始化之后,不会再重复实例化(初始化一次),所以在new之后就一个对象。

(2)当再次调用,判断是否存在这个对象,存在就直接用,不存在就重新new ,避免资源浪费消耗 ,静态变量初始化一次 就会一直存在。

如:在类里可能会多次创建对象访问数据库,如果是单例模式,可避免多次创建对象,只允许创建一个对象,避免资源浪费消耗。

(3)程序运行完,所有变量会消失

优点:在数据库用单例模式,可以避免一直生产对象。

我的问题:在Api中创建一个对象,多个单例模式,为什么能正常运行?

我的回答

①测试接口是对一个接口进行访问,每次访问结束,所有变量会消失,进行下一个接口测试时,对象是空的,会重新new一遍,从而正常运行……

②如果在同一时间访问两个不同的类,则不会报错……例如:一个对象obj,两个类book、tag,先创建了book对象,book正常运行,但到tag类时,由于没有实例化tag对象,程序将其按照book类处理,因此不会报错……

③如果在同一个时间访问两个不同的类的方法,则会报错……例如:一个对象obj,两个类book、tag,先创建了book对象,book可以正常运行,但是到tag时,单例模式判断不为空,则直接返回book对象,没有实例化tag类,调用tag类才有的方法时,就会报错……

/**
 * 单例类
 * Singleton.class
 */
class Singleton  {  
    #静态成品变量 保存全局实例
    private static $obj = NULL;
    #私有化默认构造方法,保证外界无法直接实例化
    private function __construct() {}
       
    #静态工厂方法,返还此类的唯一实例
    public static function getInstance() {
       if (empty(self::$obj)) {
           self::$obj = new Singleton();
       
       #或者这样写
       // self::$obj = new self();
       }
     
       return self::$obj;
    }
     
   #防止用户克隆实例
   public function __clone(){
      die('Clone is not allowed.' . E_USER_ERROR);
   }
}  


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值