// 抽象基类 User
abstract class User{ protected $name = NULL; // 构造函数
function User($name){
$this->name = $name;
} // 获取属性$name
function getName(){
return $this->name;
} // 浏览权限
function ViewAccess(){
return "No";
} // 编辑权限
function EditAccess(){
return "No";
} // 删除权限
function DeleteAccess(){
return "No";
} // 管理权限
function ManageAccess(){
return "No";
}
} // 普通用户
class Client extends User{ function ViewAccess(){
return "Yes";
}
} // 编辑
class Manager extends User{ function ViewAccess(){
return "Yes";
} function EditAccess(){
return "Yes";
}
} // 管理员
class Administrator extends User{ function ViewAccess(){
return "Yes";
} function EditAccess(){
return "Yes";
} function DeleteAccess(){
return "Yes";
}
} // 技术人员
class Supporter extends User{ function ViewAccess(){
return "Yes";
} function EditAccess(){
return "Yes";
} function DeleteAccess(){
return "Yes";
} function ManageAccess(){
return "Yes";
}
} // 工厂类
class Factory{ // 静态成员属性
private static $users = array("Simon"=>"Client", "Elaine"=>"Administrator", "Bob"=>"Supporter", "Tom"=>"Manager"); // 创建对象的成员方法
static function Create($name){ //根据成员属性的不同创建不同的对象
switch (self::$users[$name]){ case "Client":
return new Client($name);
case "Manager":
return new Manager($name);
case "Administrator":
return new Administrator($name);
case "Supporter":
return new Supporter($name);
}
}
} // 一个存放用户名的数组
$users = array("Elaine", "Simon", "Bob", "Tom"); // 对于每个用户分析其权限
foreach($users as $user){ $obj = Factory::Create($user); echo PHP_EOL.$obj->getName(),'的权限',PHP_EOL;
echo '浏览:',$obj->ViewAccess(),PHP_EOL;
echo '修改:',$obj->EditAccess(),PHP_EOL;
echo '删除:',$obj->DeleteAccess(),PHP_EOL;
echo '管理:',$obj->ManageAccess(),PHP_EOL;
} /*
结果:
Elaine的权限
浏览:Yes
修改:Yes
删除:Yes
管理:No Simon的权限
浏览:Yes
修改:No
删除:No
管理:No Bob的权限
浏览:Yes
修改:Yes
删除:Yes
管理:Yes Tom的权限
浏览:Yes
修改:Yes
删除:No
管理:No
*/

  

PHP设计模式之工厂模式(权限分配)的更多相关文章

  1. 5. 星际争霸之php设计模式--抽象工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. C#学习之设计模式:工厂模式

    最近研究一下设计模式中工厂模式的应用,在此记录如下: 什么是工厂模式? 工厂模式属于设计模式中的创造型设计模式的一种.它的主要作用是协助我们创建对象,为创建对象提供最佳的方式.减少代码中的耦合程度,方 ...

  3. Java设计模式之工厂模式(Factory模式)介绍(转载)

    原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...

  4. 设计模式——抽象工厂模式及java实现

    设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...

  5. 3. 星际争霸之php设计模式--简单工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  6. iOS 设计模式之工厂模式

    iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...

  7. 设计模式之工厂模式(Factory)

    设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式 简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类 代码如下: #include <stdio.h> ...

  8. php设计模式:工厂模式

    php设计模式:工厂模式 意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类. 工厂模式实现: 工厂模式中任何创建对象的工厂类都要实现这个接口,实现接口的方法体中都要实现接口中的方法,它声明 ...

  9. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

随机推荐

  1. JS函数的四种调用模式

    函数在js中具有四种身份,分别为函数.方法.构造函数.apply或call调用 函数调用    函数调用模式中this指全局对象(window) var f1 = function() { alert ...

  2. UVA 10954 Add All

    题意: 给出n个数,要将n个数相加,每次相加所得的值为当次的计算量,完成所有的求和运算后,要求总的计算量最小. 分析: 直接一个优先队列,由小到大排序,每次前两个相加就好. 代码: #include ...

  3. ng-validate

    客户端表单验证是AngularJS里面最酷的功能之一. AngularJS表单验证可以让你从一开始就写出一个具有交互性和可相应的现代HTML5表单. 在AngularJS中,有许多表单验证指令.在这里 ...

  4. Android博客

    各版本SDK Tools及ADT下载技巧:http://www.cnblogs.com/zhjsll/p/5147553.html 深入浅出SlidingMenu:http://www.cnblogs ...

  5. JAVAscript——菜单下拉列表练习(阻止事件冒泡)

    下拉列表框,鼠标点击文本框,出现下拉,鼠标(离开的时候或者点击网页其他位置时)下拉列表消失.鼠标放到下拉列表的某一项上变背景色,点击下拉列表的某一项将该项的值显示在文本框内,然后下拉列表消失. < ...

  6. hbase namespace问题

    如果遇到进入shell之后HMaster自动挂掉的问题,并且master的log里出现“TableExistsException: hbase:namespace”字样,很可能是更换了Hbase的版本 ...

  7. jvm如何知道那些对象需要回收

    1 首先的问题是:jvm如何知道那些对象需要回收 ? 目前有两种算法 引用计数法 每个对象上都有一个引用计数,对象每被引用一次,引用计数器就+1,对象引用被释放,引用计数器-1,直到对象的引用计数为0 ...

  8. Ucenter整合Thinkphp 双向同步登录退出

    1.整合初步工作: 1,安装Ucenter,完成后添加应用,填写要对接的网站地址 2,api , uc_client目录放置对接项目的根目录 3,通信对接,新建Ucenter组,confi文件填写在u ...

  9. 安装gVim

    从Vim官网下载其安装包,安装并首次运行后,开启控制台并执行如下命令: %HOMEDRIVE% cd %HOMEPATH% mkdir vimfiles cd vimfiles mkdir backu ...

  10. Android 修改toast的默认位置和获取当前屏幕的高度和宽度

    Toast toast; toast=Toast.makeText(this, "toast", Toast.LENGTH_LONG); toast.setGravity(grav ...