// 抽象基类 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. JavaScript学习笔记——JS中的变量复制、参数传递和作用域链

    今天在看书的过程中,又发现了自己目前对Javascript存在的一个知识模糊点:JS的作用域链,所以就通过查资料看书对作用域链相关的内容进行了学习.今天学习笔记主要有这样几个关键字:变量.参数传递.执 ...

  2. iOS分类

    ios中的分类其实就是把两个类用两个或多个文件写的,,在平时的开发中我们会发现有的时候我们想要一个类多个什么功能  但是已经定义好的类中没有,,我们又不想更改我们的程序  那么现在的这种情况下我就可以 ...

  3. CSS实例:水平居中和垂直居中的多种解决方案

    1.单行垂直居中 文字在层中垂直居中vertical-align 属性是做不到的.我们这里有个比较巧妙的方法就是:设置height的高度与line-height的高度相同! Example Sourc ...

  4. Web应用的部署

    本文将介绍一些Web应用的部署: 部署规则 要成功地部署一个Web应用,必须遵循以下目录结构. 1.WEB-INF一定要直接放到应用上下文(Webapp)之下. 2.classes目录必须直接放在WE ...

  5. Android 弹出窗体

    findViewById(R.id.btn).setOnClickListener(new OnClickListener() { @Override public void onClick(View ...

  6. phpcms 调用全站最新发布数据

    phpcms模板标签没有调用全站最新发布的数据 所以参考phpcms本身自带的lists方法写了一个Countlists调用全站数据 /** * 全站最热 * @param $data */ publ ...

  7. Tomjson - json 解析库

    Tomjson - 一个"短小精悍"的 json 解析库 Tomjson,一个"短小精悍"的 json 解析库,tomjson使用Java语言编写,主要作用是把 ...

  8. java猜数字小游戏

    /* * * 猜数字小游戏 * * 先由系统生成一个2-100之间的随机数字, * * 然后捕获用户从控制台中输入的数字是否与系统生成的随机数字相同, * * 如果相同则统计用户所猜的次数,并给出相应 ...

  9. USB OTG学习

    1. 概要 OTG设备使用插头中的ID引脚来区分A/B Device,ID接地被称作为A-Device,为连接时候的USB Host,A-Device始终为总线提供电力,ID悬空被称作为B-Devic ...

  10. Delphi下创建异形窗体

    procedure TForm1.FormCreate(Sender: TObject);var  pt: array [0 .. 4] of TPoint;  m_rgn: HRGN;begin   ...