php设计模式之一工厂模式--工厂方法模式

最近在学习设计模式,很多地方还理解的不够。在这里记录一下自己学习的东西,方便自己以后查看和理解,同时也给正在学这部分的同学提供一点参考。

工厂模式的几种形态:

  1、简单工厂模式(Simple Factory) |又叫做  静态工厂方法模式(Static Factory Method)
  2、工厂方法模式(Factory Method) |又叫做 多态性工厂模式(Polymorphic Factory)
  3、抽象工厂模式(Abstract Factory) |又叫做 工具箱模式(ToolKit)

   

        工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

工厂方法模式包含如下角色:

  • Product:抽象产品
  • ConcreteProduct:具体产品
  • Factory:抽象工厂
  • ConcreteFactory:具体工厂
//建立工厂
abstract class Creator
{

    protected abstract function factoryMethod();

    public function startFactory()
    {
        $mfg = $this->factoryMethod();
        return $mfg;
    }
}
//水果工厂
class FruitsFactory extends Creator
{

    protected function factoryMethod()
    {
        $obj = new Apple();
        return $obj->getProperties();
    }
}
//生产笔工厂
class PenFactory extends Creator
{
    protected function factoryMethod()
    {
        $obj = new Pencil();
        return $obj->getProperties();
    }
}





//产品接口
interface Product
{
    public function getProperties(); 
}

//苹果产品
class Apple implements Product
{

    public function getProperties()
    {
        return "making Apple";
    }
}
//铅笔产品
class Pencil implements Product
{

    public function getProperties()
    {
        return "making Pencil";
    }
}
$fobj = new FruitsFactory();
echo $fobj->startFactory() . "<br/>";
$pobj = new PenFactory();
echo $pobj->startFactory() . "<br/>";

总结一下:
      一个抽象产品类,可以派生出多个具体产品类。   
      一个抽象工厂类,可以派生出多个具体工厂类。   
   每个具体工厂类只能创建一个具体产品类的实例。

工厂方法模式应用场景:
  1.类不知道自己要创建哪一个对象
  2.类用它的子类来指定创建哪个对象
  3.客户需要清楚创建了哪一个对象

posted @ 2017-10-19 14:19  CandyChen  阅读(124)  评论(0)    收藏  举报