工厂模式三姐妹之工厂方法模式

从上篇文章《工厂模式三姐妹之普通工厂模式》我们知道了简单工厂模式的不足,就是不满足 OOP 中的 开放-关闭 原则,工厂方法模式 就很好的解决了这个问题。

开始之前我先用自己的话来描述一下什么是工厂方法模式:定义一个用于实例化类的接口,让子类决定去实例化哪一个类,将实例化过程延迟到子类。 先看代码,用工厂方法模式来实现计算器。

<?php
//计算基类
abstract class Calculate{
    protected $numA;
    protected $numB;

    public function __construct($numA,$numB){
        $this->numA = $numA;
        $this->numB = $numB;
    }

    public abstract function getResult();
}
//加法实现子类
class add extends Calculate{
    public function getResult(){
        return $this->numA + $this->numB;
    }
}
//减法实现子类
class aubtraction extends Calculate{
    public function getResult(){
        return $this->numA-$this->numB;
    }
}

//抽象工厂类
interface CalculateFactory{
    public function CreateCalculate(...$val);
}

//加法工厂类
class addCalculateFactory implements CalculateFactory{
    public function CreateCalculate(...$val){
        return new add($val[0],$val[1]);
    }
}

//减法工厂类
class delCalculateFactory implements CalculateFactory{
    public function CreateCalculate(...$val){
        return new aubtraction($val[0],$val[1]);
    }
}

//逻辑代码
$addFactory = new addCalculateFactory();
$add = $addFactory->CreateCalculate(1,3);
echo $add->getResult();

上边的代码将普通工厂模式写法中的 包含逻辑关系的工厂类 拆分为多个 职能单一的工厂类 。现在我们如果需要添加新的功能,需要添加 新功能对应的功能类 以及 实现新功能类的工厂类 ,这样我们只是新增了代码,并没有修改以前的代码,所以满足了 开放-封闭 原则。

工厂方法模式的结构图:

工厂方法模式的优点:

  • 添加新功能不需要改动以前代码,只需要新增代码,满足 开放-关闭 原则。
  • 写出的代码易于拓展和维护。

Snail's Blog
请先登录后发表评论
  • 最新评论
  • 总共0条评论
  • 本博客使用免费开源的 laravel-bjyblog v5.5.1.3 -develop 搭建 © 2014-2018 www.snail-c.cn 版权所有 ICP证:蜀ICP备18023253号-1
  • 联系邮箱:459921737@qq.com