简介
模式定义
在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象。工厂方法模式让类的实例化延迟到子类中。
模式特点
工厂方法模式包含四个角色:
- Product:抽象产品
- ConcreteProduct:具体产品
- Factory:抽象工厂
- ConcreteFactory:具体工厂
优缺点
- 克服了简单工厂的缺点,符合开放封闭原则。添加新产品时只需要添加具体的工厂类,而不需修改抽象工厂
- 添加新对象时,需要同时增加对象类和工厂类
- 用法复杂,抽象工厂在实现时可能需要使用反射技术
实例化的类可能会新增类型时,通常使用工厂模式作为创建对象的标准方式。
PHP 代码示例
<?php
abstract class AbstractButtonFactory
{
abstract public function getInstance();
}
class CircleButtonFactory extends AbstractButtonFactory
{
public function getInstance()
{
return new CircleButton();
}
}
class RectButtonFactory extends AbstractButtonFactory
{
public function getInstance()
{
return new RectButton();
}
}
abstract class AbstractButton
{
abstract public function click();
}
class CircleButton extends AbstractButton
{
public function click()
{
echo "I'm circle button";
}
}
class RectButton extends AbstractButton
{
public function click()
{
echo "I'm rectangle button";
}
}
$cbf = new CircleButtonFactory();
$circleButton = $cbf->getInstance();
$circleButton->click();