单例模式

本文介绍单例模式的概念及其实现方式,探讨如何确保一个类只有一个实例并提供全局访问点。通过PHP示例代码展示了单例模式的基本结构,包括私有构造函数、静态工厂方法等关键组成部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单例模式,保证一个类仅有一个实例,并且提供一个访问它的全局访问点。

单例模式有三个特点:

  • 一个类只有一个实例
  • 类必须自行创建这个实例
  • 必须自行向整个系统提供这个实例


单例模式的优点:

  • 对唯一实例受控访问
  • 缩小命名空间,单例模式是对全局变量的一种改进,避免了哪些存储唯一实例的全局变量污染命名空间
  • 允许对操作和表示的净化,单例类可以有子类,而且用这个扩展类的实例来配置一个应用是和容易的,可以用你所需要的类的实例在运行时刻配置应用
  • 允许可变数目的实例(多例模式)
  • 比类操作更灵活
    /**
     * 单例(Singleton)模式
     */
    
    class Singleton
    {
    	//静态成员变量,保存全局实例
    	private static $_instance = NULL;
    	
    	/**
    	 *私有化默认构造方法,保证外界无法直接实例化 
    	 */
    	private function __construct()
    	{
    	
    	}
    	/**
    	 *静态工厂方法,返回此类的唯一实例 
    	 */
    	public static function getInstance()
    	{
    		if(is_null(self::$_instance))
    		{
    			self::$_instance = new Singleton();
    		}
    		return self::$_instance;
    	}
    	
    	/**
    	 * 防止用户克隆实例
    	 */
    	public function __clone()
    	{
    		die('Clone is not allowed'.E_USER_ERROR);
    	}
    	/*
    	 * 测试
    	 */
    	public function test()
    	{
    		echo 'Singleton Test';
    	}
    	
    }
    
    class Clinet
    {
    	public static function main()
    	{
    		$instance = Signleton::getInstance();
    		$instance->test();
    	}
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值