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));
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容