您的位置:首页 > 编程语言 > PHP开发

【PHP设计模式】工厂模式

2011-10-30 02:51 736 查看
<?php
/*
* 工厂模式
* 特点:
* 创建类似于工厂的类,通过对方法成员的调用返回不同类型的对象
* 例如管理系统对于访问用户的权限设置时不同的,对于普通用户仅有一般的浏览权限
* 对于管理员,则有对数据删除和修改的权限
* 对于维护人员,则有访问用户的授权权限
* 实现:
* 工厂模式通常创建一个基类,根据对象类型的不同创建不同的扩展类,产出类型不同的对象
* 单例模式通常采用一个私有的构造函数和一个私有的克隆函数
* 确保用户无法创建或克隆对象来实例化
* 除此以外,类还包括一个静态私有变量成员$instance和静态方法getInstance
* 其中,getInstance方法对其本身对象的实例化,再将这个对象存储在$instance中
* 从而确保了只有一个实例对象被创建
* 本例子通过$switch的设置实现了对开关状态的改变
*/

//抽象基类User
abstract class User
{
protected $name = NULL;
//构造函数
function User($name)
{
$this->name = $name;	//将属性name设置成创建对象时传入的参数
}
//获取属性$name
function getName()
{
return $this->name;	//返回name属性
}
//是否具有浏览权限
function ViewAccess()
{
return "No";	//抽象基类的浏览权限为No
}
//是否具有编辑权限
function EditAccess()
{
return "No";	//抽象基类的编辑权限为No
}
//是否具有删除权限
function DeleteAccess()
{
return "No";	//抽象基类的删除权限为No
}
//是否具有用户管理权限
function ManageAccess()
{
return "No";	//抽象基类的管理权限为No
}
}
//普通用户
class Client extends User
{
//重写ViewAccess函数,对普通用户授予浏览权限
function ViewAccess()
{
return "Yes";
}
}
//管理员
class Administrator extends User
{
//重写ViewAccess函数,对普通用户授予浏览权限
function ViewAccess()
{
return "Yes";
}
//重写EditAccess函数,对普通用户授予编辑权限
function EditAccess()
{
return "Yes";
}
//重写DeleteAccess函数,对普通用户授予删除权限
function DeleteAccess()
{
return "Yes";
}
}
//维护人员
class Supporter extends User
{
//重写ViewAccess函数,对普通用户授予浏览权限
function ViewAccess()
{
return "Yes";
}
//重写EditAccess函数,对普通用户授予编辑权限
function EditAccess()
{
return "Yes";
}
//重写DeleteAccess函数,对普通用户授予删除权限
function DeleteAccess()
{
return "Yes";
}
//重写ManageAccess函数,对普通用户授予管理权限
function ManageAccess()
{
return "Yes";
}
}
//工厂类
class Factory
{
//静态成员属性
private static $users = array("Simon"=>"Client", "Elaine"=>"Administrator", "Bob"=>"Supporter");
//创建对象的成员方法
static function Create($name)
{
//根据成员属性的不同创建不同的对象
switch (self::$users[$name])
{
case "Client":
return new Client($name);
case "Administrator":
return new Administrator($name);
case "Supporter":
return new Supporter($name);
}
}
}
//一个存放用户名的数组
$users = array("Elaine", "Simon", "Bob");
//对于每个用户分析其权限
foreach($users as $user)
{
$obj = Factory::Create($user);	//创建对象$obj
echo $obj->getName() . " property:<BR>";
echo "浏览:".$obj->ViewAccess()."<BR>";	//输出浏览权限
echo "修改:".$obj->EditAccess()."<BR>";	//输出修改权限
echo "删除:".$obj->DeleteAccess()."<BR>";	//输出删除权限
echo "管理:".$obj->ManageAccess()."<BR>";	//输出管理权限
}
?>
摘自《PHP网络开发详解》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: