PHP 工廠模式

<?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));
}
最后編輯于
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容