美文网首页
PHP设计模式-工厂方法模式

PHP设计模式-工厂方法模式

作者: spike15 | 来源:发表于2016-04-23 20:52 被阅读0次

定义

工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到了子类

工厂方法模式通过让子类(NYPizzaStore, ChicagoPizzaStore)决定该创建的对象(NYStyleCheesePizza,ChicagoCheesePizza),来达到将对象创建的过程封装的目的。

类图

工厂模式定义

实例图

Creator Class

Product Class

实例

创建者

//创建者超类
abstruct class PizzaStore
{
    public function orderPizza($type)
    {
        $pizza = $this->createPizza($type);

        $pizza->prepare();
        $pizza->bake();
        $pizza->cut();
        $pizza->box();

        return $pizza;
    }

    abstract public function createPizza($type);
}

//参数化工厂方法
//具体创建者
class NYPizzaStore extends PizzaStore
{
    public function createPizza($type)
    {
        if($type == 'cheese') {
            $pizza = new NYStyleCheesePizza();
        }elseif($type == 'peppernoi') {
            $pizza = new NYStylePeppernoiPizza();
        }elseif($type == 'clam') {
            $pizza = new NYStyleClamPizza();
        }

        return $pizza;
    }
}

//具体创建者
class ChicagoPizzaStore extends PizzaStore
{
    public function createPizza($type)
    {
        if($type == 'cheese') {
            $pizza = new ChicagoStyleCheesePizza();
        }elseif($type == 'peppernoi') {
            $pizza = new ChicagoStylePeppernoiPizza();
        }elseif($type == 'clam') {
            $pizza = new ChicagoStyleClamPizza();
        }

        return $pizza;
    }
}

产品类

//产品超类
abstract class Pizza
{
    private $name;
    private $dough;
    private $sauce;
    private toppings = [];

    private function prepare()
    {
        echo "Preparing ".$this->name;
        echo "Tossing";
        ...
    }
    
    private function bake()
    {
        echo "bake";
    }

    private function cut()
    {
        echo "cut";
    }

    private function box()
    {
        echo "box";
    }

    public function getName()
    {
        return $this->name;
    }
}

//具体产品
class NYStyleCheesePizza extends Pizza
{
    public function __construct()
    {
        $this->name = "NY Style Souce and Cheese Pizza";
        $this->dough = "NY dough";
        $this->sauce = "NY sauce";
        $this->toppings[] = "Cheese";
    }

    //也可以重写父类的方法 实现子类特有的制作工艺
}

测试


$nyStore = new NYPizzaStore();
$pizza = $nyStore->orderPizza("cheese");
echo $pizza->getName();

相关文章

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

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

  • PHP完整实战23种设计模式

    前言设计模式是面向对象的最佳实践实战PHP实战创建型模式创建型 Factory Method(工厂方法)-工厂模式...

  • 《PHP设计模式大全》系列分享专栏

    php设计模式介绍之编程惯用法第1/3页 php设计模式介绍之值对象模式第1/5页 介绍php设计模式中的工厂模式...

  • 策略模式和工厂模式在促销系统下的应用

    策略模式和工厂模式在促销系统下的应用 标签: 设计模式 策略模式 工厂模式 促销系统 php 设计模式为我们提供了...

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • 工厂模式

    工厂模式 就是工厂---生产-->产品 在设计模式中,分为 简单工厂模式, 工厂方法模式,抽象工厂模式. 工厂模式...

  • 设计模式

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

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

  • 设计模式之工厂方法模式(创建型)

    一、模式定义 工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进...

  • spring 设计模式篇(前)

    设计模式俗称:套路 一、spring常见设计模式 (23种设计模式) 创建型:工厂方法模式、抽象工厂模式、建造者...

网友评论

      本文标题:PHP设计模式-工厂方法模式

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