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.客户需要清楚创建了哪一个对象
浙公网安备 33010602011771号