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

  

原文地址:https://www.cnblogs.com/intval/p/3560094.html