PHP设计模式(1)——工厂模式、单例模式、注册树模式


三种基本设计模式



工厂模式

使用工厂方法或者类生成对象,而不是直接通过new关键字生成对象。

它可以应对修改参数、函数名的场景。可以根据传参不同的值,生成不同的对象。


例子:

	
	// 传统的方法
	class Database = {...}
	$db = new Database();


	// 工厂模式
	class Factory
	{
		static function createDatabase()
		{
		  $db = new Database();
		  return $db;
		}
	}

	$db = Factory::createDatabase();
	




单例模式

某个类只允许实例化一个。

譬如说,我们的项目需要一个数据库的类,为了不在多个php里面实例化这个类,我们可以采用单例模式的形式。


例子:

	class Database
	{
		// 私有静态属性
		protected static $db;

		// 私有构造方法
		private function __construct(){}

		// 私有__clone()方法,防止被克隆
		private function __clone(){}

		// 公有静态实例方法
		public static function getInstance()
		{
		  if(self::$db){
		    return self::$db;
		  }else{
		    self::$db = new self();
		    return self::$db;
		  }
		}
	}

	// 调用方法
	$db = Database::getInstance();
	




注册模式

用于解决全局共享以及交换对象。

只要在全局使用过工厂方法注册过该对象,在别的地方可以直接使用注册树的get方法获取到对象。


例子:

	
	// 注册树类
	class Register
	{
		protected static $object;
			
		// 把对象注册到全局的树上面
		static function set($keyName, $object)
		{
		  self::$object[$keyName] = $object;
		}
		
		// 把对象从全局的树上卸载
		function _unset()
		{
		  unset(self::$object[$keyName]);
		}
		
		// 向外抛出实例对象
		static function get($keyName)
		{
		  return self::$object[$keyName];
		}
	}


	// 工厂类
	class Factory
	{
		public static function createDatabase()
		{
		  // 调用了单例模式的获取实例对象的方法
		  $db = Database::getInstance();
		  return $db;
		}
	}

	// 1.注册对象(可以放在应用初始化的文件完成)
	Register::set('db1', Factory::createDatabase());

	// 2.获取对象
	Register::get('db1');
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值