PHP开发模式简单介绍之工厂模式

简单工厂模式
1.抽象基类:类中定义一些抽象方法,然后再子类中实现
2.继承自抽象基类的子类:实现基类中的抽象方法
3.工厂类:用以实例化对象
实现方式:

//操作类
abstract class Operation
{
    // 抽象方法不能包含函数体
    // 强烈要求子类必须实现该功能函数
    abstract public function getValue($num1,$num2);
}

//实现类 这里简单实现一个运算
class Add extends Operation
{

    public function getValue($num1, $num2)
    {
        return $num1 + $num2;
    }

}

//工程类,用来创建实现类对象
class Factory
{
    //创建实例
    public static function create()
    {
        return new Add();
    }
}

//简单使用
$obj = Factory::create();
$res = $obj->getValue(10,10);
//输出结果为:20
echo $res;

上面简单的实现了一个运算
在开发中我们都会有很多这个类似的运算或者其他的业务
我们在添加其他的业务的时候只需要在操作类Operation中添加一个抽象方法,
然后实现类继承操纵类并且该实现类中必须有操作类的抽象方法,
再通过工程类Factory去创建对应的对象。

eg:我们在实现一个减法运算:
只需要在新建一个实现类Sub并继承Operation,然后再Factory类中的创建对象方法中添加一个判断。

//实现减法
class Sub extend Operation
{
    public function getValue($num1, $num2)
    {
        return $num1 - $num2;
    }
}

//修改Factory的create方法体【给该方法添加一个参数以便区分创建想要的类】
//这里用+和-作为参数
switch ($param)
{
    //加法
    case '+':
         return new Add();
         break;
    //减法
    case '-':
         return new Sub();
         break;
    default:
         throw new Exception('不支持的运算');
}

//使用的时候传对应的参数就可以实现
$obj = Factory::create('-');
$res = $obj->getValue(10,10);
//输出结果为:0
echo $res;

缺点:扩展方面比较硬编码更易扩展维护,但是如果我们有了跟多的运算比如乘法*`,触发/等等,这样就像
我上面说的去添加新的实现类然后再修改工程类的create方法体,这样就会有很多很多的case。

添加新评论