zoukankan      html  css  js  c++  java
  • 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
    */
    

      

  • 相关阅读:
    [ELK] Elasticsearch 安装/配置、启动/停止、加节点/重启
    [ELK] Elastic Stack 的安全性预览
    [Gin] gin.H{} 与 map[string]interface{}
    [Go] 浅谈 Golang struct 与 PHP class 的相似
    [FAQ] Git 修改最后一次的提交人和提交时间 ?
    [Blockchain] 开发完真实的 DApp 后才能得出的结论与看法
    Android 5.0 Phone初始化分析
    推荐一个Android开发懒人库 -- ButterKnife
    ffmpeg 移植到 android 并使用
    为app录制展示gif
  • 原文地址:https://www.cnblogs.com/intval/p/3560094.html
Copyright © 2011-2022 走看看