美文网首页PHP程序员
PHP工厂模式之工厂方法模式

PHP工厂模式之工厂方法模式

作者: php转go | 来源:发表于2020-08-19 11:23 被阅读0次

1、模式定义
定义一个创建对象的接口,但是让子类去实例化具体类。工厂方法模式让类的实例化延迟到子类中。
创建一个抽象类,在抽象类下创建抽象方法,必须由子类去重写实现,

例如生产猫的玩具,
代码

/**工厂方法抽象类
 * Class FactoryMethod
 * @package app\lib\Method
 */
abstract class FactoryMethod
{
    /**子类必须实现该方法
     * @param $type
     * @return mixed
     */
    abstract  public function create($type,$color);
}

可以创建A工厂,生产各种猫玩具。。。
可以创建B工厂,生产各种狗玩具。。。
可以创建C工厂,生产各种猪玩具。。。
继承工厂方法抽象类,每个工厂生产的不一样,必须重写他的create方法

/**A工厂,
 * Class AFactory
 * @package app\lib\Method
 */
class AFactory extends FactoryMethod
{

    public function create($type,$color)
    {
        switch ($type) {
            case 0:
                $obj= new Shorthair();//短毛猫
                break;
            case 1:
                $obj= new Persian();//波斯猫
                break;
            default:
                $obj= new Domestic();//家猫
                break;
        }
        $obj->setColor($color);

        return $obj;
    }
}

创建猫玩具接口

/**猫玩具的接口
 * Interface CatInterface
 * @package app\lib\Method
 */
interface CatInterface
{
    /**设置猫的颜色
     * @param $rgb
     * @return mixed
     */
    public function setColor($rgb);
}

具体产品

/**波斯猫
 * Class Persian
 * @package app\lib\Method
 */
class Persian implements CatInterface
{

    private $color;
    public function setColor($rgb)
    {
        $this->color=$rgb;
    }
    public function getColor()
    {
        return $this->color.'波斯猫';
    }
}

/**短毛猫
 * Class Shorthair
 * @package app\lib\Method
 */
class Shorthair implements CatInterface
{

    private $color;
    public function setColor($rgb)
    {
        $this->color=$rgb;
    }
    public function getColor()
    {
        return $this->color."短毛猫";
    }
}

/**家猫
 * Class Domestic
 * @package app\lib\Method
 */
class Domestic implements CatInterface
{

    private $color;
    public function setColor($rgb)
    {
        $this->color=$rgb;
    }
    public function getColor()
    {
        return $this->color.'家猫';
    }
}

控制器调用

public function index(){
        //我们不需要关心什么工厂,知道他可以生产猫就可以了
        $factory=new AFactory();
        //生产蓝色的波斯猫
       $res= $factory->create(0,"蓝色");
       var_dump($res->getColor());

    }

相关文章

  • PHP-浅谈单例模式和工厂模式

    PHP中常用的设计模式有单例模式、工厂模式(简单工厂模式、工厂方法模式和抽象工厂方法模式)、适配模式、策略模式。 ...

  • 设计模式

    php关键字 1.工厂模式分类 工厂模式具体可分为三类模式:简单工厂模式,工厂方法模式,抽象工厂模式; 1.1. ...

  • Java与模式

    《JAVA与模式》之简单工厂模式《JAVA与模式》之工厂方法模式《JAVA与模式》之抽象工厂模式

  • 2016.06笔记

    iOS设计模式之工厂模式(简单工厂,工厂方法,抽象工厂) 简单工厂:简单工厂模式的工厂类一般是使用静态方法,通过接...

  • 大话设计模式之_工厂模式

    大话设计模式之_工厂模式 工程方法(即简单工厂模式simpleFactory,或静态工厂方法 static fac...

  • 设计模式之死磕工厂方法模式(原创)

    在设计模式之工厂模式中,我们提到过工厂模式仔细区分的话分为三种,分别是简单工厂模式、工厂方法模式以及抽象工厂模式。...

  • 设计模式之工厂模式

    设计模式之工厂模式 1. 简单工厂模式 1.1 模式定义 简单工厂模式又称为静态工厂方法,它属于创建型模式。在简单...

  • 设计模式-3种工厂模式

    工厂模式包括:简单工厂模式,工厂方法模式,抽象工厂模式 简单工厂模式 工厂方法根据参数直接创建实例:工厂->产品 ...

  • 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

    找女朋友之简单工厂模式,工厂模式,抽象工厂模式 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

  • 设计模式三十六计之工厂方法(Factory Method)

    设计模式三十六计之工厂方法(Factory Method) 解释:工厂方法模式是简单工厂模式的衍生,解决了简单工厂...

网友评论

    本文标题:PHP工厂模式之工厂方法模式

    本文链接:https://www.haomeiwen.com/subject/vybkjktx.html