PHP设计模式之工厂模式(权限分配)
// 抽象基类 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设计模式之工厂模式(权限分配)的更多相关文章
- 5. 星际争霸之php设计模式--抽象工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- C#学习之设计模式:工厂模式
最近研究一下设计模式中工厂模式的应用,在此记录如下: 什么是工厂模式? 工厂模式属于设计模式中的创造型设计模式的一种.它的主要作用是协助我们创建对象,为创建对象提供最佳的方式.减少代码中的耦合程度,方 ...
- Java设计模式之工厂模式(Factory模式)介绍(转载)
原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...
- 设计模式——抽象工厂模式及java实现
设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...
- 3. 星际争霸之php设计模式--简单工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- iOS 设计模式之工厂模式
iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...
- 设计模式之工厂模式(Factory)
设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式 简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类 代码如下: #include <stdio.h> ...
- php设计模式:工厂模式
php设计模式:工厂模式 意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类. 工厂模式实现: 工厂模式中任何创建对象的工厂类都要实现这个接口,实现接口的方法体中都要实现接口中的方法,它声明 ...
- 浅析JAVA设计模式之工厂模式(一)
1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...
随机推荐
- 从头开始-06.C语言中预处理指令
预处理指令 不带参数的宏定义: 格式: #define 宏名 值 作用:提高代码的可读性 在程序编译前把所有出现宏名标示的位置都替换为定义宏的时候,宏名后面的值 带参数的宏定义 格式 #define ...
- jQuery基础---Ajax基础教程
jQuery基础---Ajax基础 内容提纲: 1.Ajax 概述 2.load()方法 3.$.get()和$.post() 4.$.getScript()和$.getJSON() 5.$.ajax ...
- SQL Server 事务嵌套
示例代码: DECLARE @TranCounter INT; SET @TranCounter = @@TRANCOUNT; -- Procedure called when there is -- ...
- Scala基础入门-3
学习Scala——映射和元组 映射和和元组,也就是Maps和Tuples.Map这东西应该都挺明白的,就是键值对的集合.而元组,tuple,这东西并不是每个语言都有(Python中是有的,不过当时学的 ...
- 如何解决jquery库的冲突问题
多个库之间的冲突 当一个项目中引入多个第三方库的时候,由于没有命名空间的约束(命名空间就好比同一个目录下的文件夹一样,名字相同就会产生冲突),库与库之间发生冲突在所难免. 那么,既然有冲突的问题,为什 ...
- hdu 5446 Unknown Treasure 中国剩余定理+lucas
题目链接 求C(n, m)%p的值, n, m<=1e18, p = p1*p2*...pk. pi是质数. 先求出C(n, m)%pi的值, 然后这就是一个同余的式子. 用中国剩余定理求解. ...
- ajax 数据回传
response.getWriter().print(reval > 0 ? true : false); //=========================== Object[] str ...
- 在非MVC环境下使用 Razor引擎
Razor引擎下载地址: http://github.com/Antaris/RazorEngine 解析Model: string template = "Hello @Model.Nam ...
- Oracle EBS-SQL (WIP-11):检查期间任务完工记录数.sql
select WE.WIP_ENTITY_NAME 任务名称, WDJ.class_code ...
- keil mdk中如何确保某一段程序不被优化掉
使用mdk编程,假如有一个有用的函数你定义了但是没有显式的调用,mdk在默认方式下,将会把这个函数从整个程序总删除掉,以节省ROM. 比如,你在ROM的0x00002000处定位了一个函数,假设为vo ...