1:工厂模式
例如:Auth::user()
此处Auth这个类就是工厂中的方法,Auth是注册树中的别名。
好处:
类似于函数的封装,使对象有一个统一的生成(实例化)入口。当我们对象所对应的类的类名发生变化的时候,我们只需要改一下工厂类类里面的实例化方法即可。
2:单例模式
好处:
对象不可外部实例化并且只能实例化一次,节省资源。
实现方式:
private static $ins = null; //设置私有的属性
private function __construct() {} //使外部无法new这个类
public static function getIns() { //暴露给外部的调用方法
if(self::$ins instanceof self) {
return self::$ins;
} else {
self::$ins = new self();
return self::$ins;
}
}
声明一个类的私有或者保护的静态变量,构造方法声明为私有(不允许外部进行new操作),如果不存在则实例化它,然后返回,如果存在则直接返回。
3:注册树模式
使用:
config/app里的aliases数组便是一个注册树
好处:
注册树模式就是使用数组结构来存取对象,工厂方法只需要调用一次(可以放到系统环境初始化这样的地方),以后需要调用该对象的时候直接从注册树上面取出来即可,不需要再调用工厂方法和单例模式。
实现方法:
class Register {
protected static $objects
function set($alias,$object) { //将对象映射到全局树上
self::$objects[$alias]=$object;
}
static function get($name) { //获取对象
return self::$objects[$name];
}
function _unset($alias) { //从全局树移除对象
unset(self::$onjects[$alias]);
}
}
$alias表示别名,自己设定
在工厂模式中添加
Register::set(‘db1’,$db);
其他任何地方调用只需要调用注册器读取即可
Register::$objects[‘db1’];
4:适配器模式
将不同工具的不同函数接口封装成统一的API,方便调用。如:mysql,mysqli,PDO。
实现:在接口类里面申明统一的方法体,再让不同的类去实现这个接口,和重写其