// 抽象基类 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. Oracle User Management FAQ翻译及学习笔记

    转载 最近了解到AME 的东西,很迫切,先转载一篇 [@more@] Oracle User Management FAQ翻译及学习笔记 写在前面 本文主要是翻译的英文版的Oracle User Ma ...

  2. linux通过文件查找依赖关系

    通过文件查找安装包安装缺少libstdc++6这个文件在ls /usr/lib/libstd*下有两个文件/usr/lib/libstdc++.so.6 /usr/lib/libstdc++.so.6 ...

  3. "Classifying plankton with deep neural networks" notes

    cross entropy loss is not quite the same as optimizing classification accuracy. Althougth the two ar ...

  4. DWZ 框架remote 验证字段唯一性方法提交后台,如果是中文会显示成乱码问题

    关于jquery  remote 验证字段唯一性方法提交后台,如果是中文会显示成乱码问题.可以直接修改tomcat 配置文件server.xml  设置 URIEncoding=utf-8属性,将ge ...

  5. 快速学习javascript对象-遍历对象

    为了方便了解每个javascript对象包含的方法,我写一个函数. function GetCollection(obj){ try{ if(obj){ var sType=""; ...

  6. Flink Program Guide (6) -- 窗口 (DataStream API编程指导 -- For Java)

    窗口(Window) 本文翻译自文档Windows ----------------------------------- Flink使用窗口的概念,根据element的时间戳或者其他指标,将可能无限 ...

  7. Javascript 之内置对象

    JS提供了11种引用类型:Object.Array.Date.Function.Error.RegExp.Math.Number.String.Boolean.Globle.其中包括了三种基本包装类型 ...

  8. Android06-Fragment碎片

    ¨Fragment简介 ¨Fragment生命周期 ¨动态加载碎片Fragment Manager的使用   1.Fragment表示Activity中的一种行为或者一部分用户界面. 可以将Fragm ...

  9. QtQml 应用程序的性能考虑与建议(来自小V的翻译)

    QtQml 应用程序的性能考虑与建议 原文:csdn aidear_evo QtQml应用程序的性能考虑与建议 本文翻译自Qt官网文档:http://doc.qt.io/qt-5/qtquick-pe ...

  10. flex实现股票行情走势图

    原文 http://blog.csdn.net/shenjiancomputer/article/details/8051873 第一步: jsp:1 <%@page import=" ...