1.工厂模式
常规创建对象的方法,直接new该类
$db
=
new
Com\Database();
缺点当方法名或者参数变化时间,需多处修改
工厂模式,在工厂类方法创建db类,统一调用工厂方法
class
Factory
{
static function
createDatabase(){
$db
=
new
Database();
return
$db
;
}
}
$db
= Com\Factory::
createDatabase
();
2.单例模式
例如数据库类,经常需要创建数据库连接,多次创建数据库链接会造成资源浪费
使用单例模式,多次调用,也只会有一次数据库链接
例子:
在db类中把构造方法设置为私有,防止类外调用,通过
getInstance单例方法创建对象,
这样如果调用多少次
getInstance方法都只会创建一次对象.
class
Database{
protected static
$db
;
//私有化构造方法,禁止在类外实例化;
private function
__construct()
{
}
static function
getInstance(){
if
(
self
::
$db
){
return new self
();
}
else
{
self
::
$db
=
new self
();
return self
::
$db
;
}
}
}
$db
= Com\Database::
getInstance
();
$db
= Com\Database::
getInstance
();
$db
= Com\Database::
getInstance
();
3.注册树模式
//调用一次实例之后,注册到注册树,
之后不需要再调用实例,直接从注册器获取。
class
Register{
protected static
$objects
;
static function
set(
$alias
,
$object
){
self
::
$objects
[
$alias
] =
$object
;
}
static function
get(
$name
){
return self
::
$objects
[
$name
];
}
static function
_unset(
$alias
){
unset
(
self
::
$objects
[
$alias
]);
}
}
class
Factory{
static function
createDatabase(){
$db
= Database::
getInstance
();
//调用一次实例之后注册到注册树
Register::
set
(
"db1"
,
$db
);
return
$db
;
}
}
只需注册一次,之后直接在注册器获取
$db
= \Com\Register::
get
(
'db1'
);