PHP设计模式三种基本设计模式

1)工厂模式:

工厂方法或者类生成对象,而不是代码中直接new
多用来生成对象
好处。如果很多个文件都使用了这个类的话,如果修改需要去每个文件下都进行修改,而使用工厂模式的话,则只用在类里面修改创建方法就好了。
很多其他高级的模式都是依赖于工厂模式的。
实现方式,就是在类里面之间实现new的方式,然后返回生成的对象就行了,这样在其他文件使用的时候,只要调用这个生成方法就好了。
Factory类

<?php
    namespace Imooc;  
    class Factory{ 
        static function createDatabase(){ 
            $db = new Database; 
            return $db;
        }
    } 
?>

调用的时候:

$db = Imooc\Factory::createDatabase();

//这样就能代替new的方法了

2)单例模式

使某个类或者对象仅允许创建一个
比如数据库这种的话,虽然很多地方都进行调用,这样就会连接多次数据库,会造成数据库浪费,所以数据库这样的话,使用单例模式,这样只会创建一个数据库连接。
实现方式:
通过将类的构造函数__construct方法继承然后定义为私有的方式可以让其他地方无法用new的方式实例化。
然后写一个类似getInstance的方法。这个方法就是判断是否有已有实例化的对象。如果有的话,则返回这个对象,如果没有,即第一次调用的时候,则自己用new方式实例化。

<?php 
    //设置一个属性方便设计模式 
protected $db;
private function __construct() {
	//对构造函数进行私有话处理的,在其他文件或者类里面,如果你使用new来实例化这个类的话,会提示无法实例化
}
static function getInstance() {
	//然后通过new self这种形式来调用私有__construct的构造方法,一般new的时候调用的就是__construct的方法 
	//赋值到静态属性上 
	if(self::$db) {
		//如果存在的话,直接返回已有的属性就好了 //这就是单例模式的实现方式
		return self::$db;
	} else {
		self::$db = new self();
		return self::$db;
	}
}
?>

3)注册树模式

实现全局共享,这样比如单独写一个方法的时候,不用每次都传递参数了,直接用set把他放到注册类中,然后用想调用的时候用get方法获取。
上述两个模式有个缺点的话,是必须去调用这个工厂或者单例。
建立一个register的类,然后创建一个set,get,_unset方法。
然后创建一个全局的$object类的对象,然后再set中,把东西保存到数组里。这样全局都可以使用了。

<?php
namespace Imooc;
class Register {
	protected static $objects;
	//加上static就不会显示黄色错误了 
	static function set($alias, $object) {
		//当调用这个set方法的时候,映射到$objects这个对象上 
		self::$objects[$alias] = $object;
	}
	static function get($name) {
		return self::$objects[$name];
	}
	function _unset($alias) {
		//因为unset是php自带的函数,所以要加个下划线 
		unset(self::$objects[$alias]);
	}
}
?>

使用的时候

在工厂类中,添加一个set的方法进行保存

<?php 
namespace Imooc;
class Factory {
	static function createDatabase() {
		//     
		$db = Database::getInstance();
		//        
		return $db;
		//注册数模式 
		$db = Database::getInstance();
		//如果把对象映射到身份证上面。这样在其他文件调用的时候只用调用一次 
		Register::set('db1', $db);
		return $db;
	}
}
?>

然后在index.php中调用的时候时候,调用get方法就能获取对象了。

$db = \Imooc\Register::get('db1');
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值