工厂模式三姐妹之简单工厂模式

简单工厂模式。

工厂模式,一搬正常的人看到这个名字就大概知道这种模式是关于建造新类的一种模式。没错。它是属于 创建新模式 的一种。

我用自己的话总结一下就是:在一个类的方法中通过条件分支判断来实例化不同功能的类,这个类就叫做工厂类,对应的方法叫做工厂方法

我们先看以下用简单工厂模式实现的计算器代码(改代码只做演示):

<?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;
    }
}
//计算工厂类
class CacluteFactory{
    //工厂方法
    public static function getResultFactory($ope,$numA,$numB){
        switch($ope){
            case '+':
                return new add($numA,$numB);
            case '-':
                return new aubtraction($numA,$numB);
            default:
                throw new Exception('has not this invoke!');
        }
    }
}

//逻辑代码
$calculate = CacluteFactory::getResultFactory('+',1,3);
echo $calculate->getResult();

我们来看看简单工厂的 UML 图:

简单工厂的优点:

  • 工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。


简单工厂的不足:

  • 正如你想到的,如果你需要添加添加新的运算方式,你不仅需要加新的类,还需要改变工厂类,增加对应新类生成代码,这样就违背了面向对象的一个原则: 开放-封闭原则

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