<?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 工廠模式
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 因為工作的需要,陸陸續(xù)續(xù)接觸了很不多不同的框架,也慢慢滲透了一些設(shè)計模式。當(dāng)初選擇入手php,就是因為腳本語言,簡...
- 單例模式又稱為職責(zé)模式,它用來在程序中創(chuàng)建一個單一功能的訪問點,通俗地說就是實例化出來的對象是唯一的。 所有的單例...
- 單例模式又稱為職責(zé)模式,它用來在程序中創(chuàng)建一個單一功能的訪問點,通俗地說就是實例化出來的對象是唯一的。 所有的單例...
- 夜已深。 淺淺的月光溜進(jìn)了我的窗臺。幾枝樹葉倒映在窗前,在微風(fēng)的吹拂下?lián)u曳著如夢似幻的美。月影婆娑的時候,夜是及其...
- 5.1 循環(huán)簡介 無 5.2 基本運算符 1.賦值是從右向左進(jìn)行的,如語句`d=c=b=a=1`,先是 a = 1...