【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网络开发详解》
原创粉丝点击