工厂模式(简单工厂、工厂方法、抽象工厂)

233 阅读1分钟

简单工厂模式

把对象的创建和使用的过程分开

class Phone
{
    public function makePhone($phone)
    {
        return (new $phone)->getPhone();
    }
}

class Xiaomi
{
    public function getPhone()
    {
        echo 'get a xiaomi phone';
    }
}

class Huawei
{
    public function getPhone()
    {
        echo 'get a huawei phone';
    }
}

$phone = new Phone();
$phone->makePhone('Xiaomi');
$phone->makePhone('Huawei');

工厂方法模式

主要用于限制类的公用方法

interface Phone
{
    public function makePhone();
}

class Xiaomi implements Phone
{
    public function makePhone()
    {
        echo 'get a xiaomi phone';
    }
}

class Huawei implements Phone
{
    public function makePhone()
    {
        echo 'get a huawei phone';
    }
}

$xiaomi = new Xiaomi();
$xiaomi->makePhone();
$huawei = new Huawei();
$huawei->makePhone();

抽象工厂模式

工厂方法模式 + 简单工厂模式

interface Factory
{
    public function makePhone();
    public  function makePc();
}

class Xiaomi implements Factory
{
    public function makePhone()
    {
        echo 'get a xiaomi phone';
    }

    public function makePc()
    {
        echo 'get a xiaomi pc';
    }
}

class Huawei implements Factory
{
    public function makePhone()
    {
        echo 'get a huawei phone';
    }

    public function makePc()
    {
        echo 'get a huawei pc';
    }
}

$xiaomi = new Xiaomi();
$xiaomi->makePhone();
$xiaomi->makePc();
$huawei = new Huawei();
$huawei->makePhone();
$huawei->makePc();