PHP-工厂模式

142 阅读1分钟

什么是工厂模式

组装一台电脑,需要不同的零件,而工厂模式就像零件制造商一样,不同的零件不同的工厂负责或者管理着不同的零件工厂,将代码进行解耦,不需要在逻辑代码中new不同的类,进行一个统一的管理。

工厂模式的实现

<?php

/**
 * 一个运算方法的接口
 * Interface Operation
 */
interface Operation
{
    /**
     * 两个数的运算
     * @param int $num1
     * @param int $num2
     * @return int
     */
    public function getVal (int $num1, int $num2): int;
}

/**
 * 加法
 * Class Add
 */
class Add implements Operation
{
    public function getVal(int $num1, int $num2): int
    {
        return $num1 + $num2;
    }
}

/**
 * 减法
 * Class Sub
 */
class Sub implements Operation
{
    public function getVal(int $num1, int $num2): int
    {
        return $num1 - $num2;
    }
}

/**
 * 运算工厂(工厂模式)
 * Class CounterFactory
 */
class CounterFactory
{
    private static $operation;// 运算

    /**
     * 创建一个运算
     * @param string $operation
     * @return Add|Sub
     */
    public static function createOperation (string $operation)
    {
        switch ($operation) {
            case '+':
                self::$operation = new Add();
                break;
            case '-':
                self::$operation = new Sub();
                break;

        }
        return self::$operation;
    }
}

$factory = CounterFactory::createOperation('+');
$res = $factory->getVal(1, 2);
var_dump($res);