<?php
abstract class User
{
protected $name;
public function __construct($name)
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
public function hasReadPermission()
{
return true;
}
public function hasModifyPermission()
{
return false;
}
public function hasDeletePermission()
{
return false;
}
public function wantsFlashInterface()
{
return true;
}
}
class GuestUser extends User
{
}
class CustomerUser extends User
{
public function hasModifyPermission()
{
return true;
}
}
class AdminUser extends User
{
public function hasModifyPermission()
{
return true;
}
public function hasDeletePermission()
{
return true;
}
function wantsFlashInterface()
{
return false;
}
}
class UserFactory
{
private static $users = ['Andi' => 'admin', 'Stig' => 'guest', 'Derick' => 'customer'];
public static function create($name)
{
if (!isset(self::$users[$name])) {
// 報出錯誤,因為用戶不存在
}
switch (self::$users[$name]) {
case "guest": return new GuestUser($name);
case "customer": return new CustomerUser($name);
case "admin": return new AdminUser($name);
default: //報出錯誤,因為用戶類型不存在
}
}
}
function boolToStr($b)
{
if ($b == true) {
return "Yes\n";
} else {
return "No\n";
}
}
function displayPermissions(User $obj)
{
print $obj->getName() . "'s permissions:\n";
print "Read: " . boolToStr($obj->hasReadPermission());
print "Modify: " . boolToStr($obj->hasModifyPermission());
print "Delete: " . boolToStr($obj->hasDeletePermission());
}
function displayRequirements(User $obj)
{
if ($obj->wantsFlashInterface()) {
print $obj->getName() . " requires Flash\n";
}
}
$logins = ["Andi", "Stig", "Derick"];
foreach ($logins as $login) {
displayPermissions(UserFactory::create($login));
displayRequirements(UserFactory::create($login));
}
PHP 工廠模式
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
推薦閱讀更多精彩內容
- 因為工作的需要,陸陸續續接觸了很不多不同的框架,也慢慢滲透了一些設計模式。當初選擇入手php,就是因為腳本語言,簡...
- 5.1 循環簡介 無 5.2 基本運算符 1.賦值是從右向左進行的,如語句`d=c=b=a=1`,先是 a = 1...