【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网络开发详解》
相关文章推荐
- 介绍php设计模式中的工厂模式
- php设计模式(二)简单工厂模式
- php设计模式之工厂模式
- 基于php设计模式中工厂模式详细介绍
- PHP设计模式之工厂模式详解
- php设计模式_简单工厂2
- 9. PHP 之 Factory pattern(工厂设计模式)
- php设计模式 Factory(工厂模式)
- 3. 星际争霸之php设计模式--简单工厂模式
- PHP最常用的2种设计模式工厂模式和单例模式
- PHP之设计模式(工厂、单例)
- php设计模式之工厂模式
- PHP设计模式之:工厂模式
- php设计模式 Factory(工厂模式)
- PHP设计模式——工厂方法
- PHP最常用的2种设计模式工厂模式和单例模式介绍
- php模式设计之 工厂模式
- php使用接口实现工厂设计模式
- PHP 常见工厂设计模式
- PHP 面向对象编程和设计模式 (3/5) - 单例模式和工厂模式