【PHP设计模式】工厂模式
来源:互联网 发布:java nio jar 编辑:程序博客网 时间:2024/05/22 07:53
<?php/* * 工厂模式 * 特点: * 创建类似于工厂的类,通过对方法成员的调用返回不同类型的对象 * 例如管理系统对于访问用户的权限设置时不同的,对于普通用户仅有一般的浏览权限 * 对于管理员,则有对数据删除和修改的权限 * 对于维护人员,则有访问用户的授权权限 * 实现: * 工厂模式通常创建一个基类,根据对象类型的不同创建不同的扩展类,产出类型不同的对象 * 单例模式通常采用一个私有的构造函数和一个私有的克隆函数 * 确保用户无法创建或克隆对象来实例化 * 除此以外,类还包括一个静态私有变量成员$instance和静态方法getInstance * 其中,getInstance方法对其本身对象的实例化,再将这个对象存储在$instance中 * 从而确保了只有一个实例对象被创建 * 本例子通过$switch的设置实现了对开关状态的改变 */ //抽象基类Userabstract 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网络开发详解》