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
    */
    

      

  • 相关阅读:
    [做题记录-乱做] [AGC004F] Namori
    字符串分割去除空格
    逆向实战01-嘟嘟牛在线
    mysql超8小时解决
    macbook golang的debug模式不好使
    博客暂时废弃公告
    [干货] 博客园主题
    [Contest on 2021.10.14] 我靠,真的好困!
    [Contest on 2021.10.9] 说好的 100kb 呢?
    [Contest on 2021.10.7] 已经起不了标题了...
  • 原文地址:https://www.cnblogs.com/intval/p/3560094.html
Copyright © 2011-2022 走看看