- 工厂模式:该模式是将类的实例化进行封装,而不是直接实例化,例如
<?php
class Factory{
static function create()
{
$c = new ClassTest();//已知类ClassTest
return $c;
}
}
?>
<?php
$test = Factory::create();
?>
在本例中,我们没有直接使用$test = new ClassTest();来实例化类ClassTest,而是将实例化封装在Factory类中,这样做的好处就是,如果我们实例化了很多classtest类对象,当我们对CLassTest类名进行修改时,只需在Factory::create()中进行修改。 - 单例模式:该模式使得某些只需实例化一次而在多处使用,比如:只进行一次数据库连接,而可以使得多个地方使用,每次使用数据库时都连接数据库了。
<?php
class Connect{
private static $db;
private function __construct()
{
/*将构造函数定义为私有的,这样类connect将不能够在类外实例化*/
}
static function get_instance($host, $database, $user, $pwd)
{
if (!self::$db)//如果$db已经存在
{
$db = new self();
}
return $db;
}
}
$database = Connect::get_instance($host, $database, $user, $pwd);
?>
- 注册树模式:将已经实例化的对象注册到注册树(数组)中,下次使用直接从中提取就是,而不必在此实例化一个对象,一个被注册的对象将是一个全局的对象了。
<?php
class Factory{
static function create()
{
$c = new classtest();
/*将对象注册到注册数组中,一旦调用Factory::create()之后,便无需再次实例化了,直接打注册数组中取出就是*/
Register::set($db, $c);
return $c;
}
}
?>
<?php
$test = Factory::create();
?>
<?php
class Register{
/*注册数组*/
private static $reg_arr;
/*获取注册对象*/
public static function get($key)
{
return self::$re_arr[$key];
}
/*设置注册对象*/
public static function set($key, $value)
{
self::$reg_arr[$key] = $value;
}
/*消除注册对象*/
public static function _unset($key)
{
unset($reg_arr[$key]);
}
}
$db2 = Register::get($db);
?>
# 关注作者公众号
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030082939134.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FuZXV0cm9u,size_16,color_FFFFFF,t_70#pic_center)
三个基本的设计模式
最新推荐文章于 2024-02-05 15:17:42 发布