PHP

php设计模式(三)----工厂方法模式

Royal
2022-04-12 / 0 评论 / 136 阅读 / 正在检测是否收录...

应用场景:

  • 要实例化的对象充满不确定性可能会改变的时候;
  • 要创建的对象的数目和类型是未知的;

结构:

工厂方法UML图
l1vr9kyc.png

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

  1. Product接口类:用于定义产品规范;
  2. 具体的产品实现,例如ConcreateProductA、ConcreateProductB;
  3. 抽象工厂类IFactory:用于规范工厂;
  4. 具体产品创建的简单工厂,例如ConcreateFactoryA、ConcreateFactoryB。

相比简单工厂 ,创建对象这件事不再交由一个类来创建:把简单工厂拆分,每个产品由专门的一个简单工厂来实现,每个简单工厂实现工厂接口类。这样实现在同一等级结构中,支持增加任意产品。

代码实现:

  • ICar.php定义产品规范

    <?php
    namespace SimpleFactory;
    
    interface ICar
    {
        public function driver();
    }
    
  • 具体产品实现

    <?php
    namespace SimpleFactory;
    
    class Benz implements ICar
    {
        public function driver()
        {
            echo 'benz driver.';
        }
    }
    
    class Bmw implements ICar
    {
        public function driver()
        {
            echo 'bmw driver.';
        }
    }
    
  • 抽象工厂类IFactory

    <?php
     namespace Factory;
    
    interface IFactory
    {
        public static function makeCar();
    }
    
  • 具体工厂实现

    namespace Factory;
    
    class FactoryBenz implements IFactory
    {
        public static function makeCar()
        {
            return new Benz();
        }
    }
    
    class FactoryBmw implements IFactory
    {
        public static function makeCar()
        {
            return new Bmw();
        }
    }
  • 客户端使用

    <?php
    // 客户端
    $car = FactoryBenz::makeCar();
    $car->driver();   // 输出 benz driver.
0

评论

博主关闭了当前页面的评论