PHP

php设计模式(二)----简单工厂模式

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

应用场景:

  • 工厂类负责创建的对象比较少;由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂;
  • 客户端只知道传入工厂类的参数,对于如何创建对象不关心;

结构:

l1rnu5d1.png

简单工厂模式包含如下角色:

  1. Factory(工厂角色)
    工厂角色即工厂类,它是简单工厂模式的核心,负责实现创建所有实例的内部逻辑;工厂类可用直接被外界调用,创建所需要的产品对象;在工厂类中提供了静态的工厂方法factoryMethod(),它返回一个抽象产品类Product,所有的具体产品都是抽象产品的子类。
  2. Product(抽象产品角色)
    抽象产品角色是简单工厂模式所创建的所有对象的分类,负责描述所有实例所共有的公共接口,它的引入将提高系统的灵活性,使得在工厂类中只需定义一个工厂方法,因为所有创建的具体产品对象都是其子类对象
  3. ConcreteProduct(具体产品角色)
    具体产品角色是简单工厂模式的创建目标,所有创建的对象都充当这个角色的某个具体类的实例。每一个具体产品角色都继承了抽象产品角色,需要实现定义在抽象产品中的抽象方法。

代码实现:

  • 抽象产品角色Protuct.php

    <?php
    // 抽象产品角色
     
    interface Product
    {
        public function play();
    }
  • 具体产品角色productA.php

    <?php
    // 具体产品角色A
    require_once 'Product.php';
    class productA implements Product
    {
        public function play()
        {
            // TODO: Implement play() method.
            echo 'productA play...';
        }
     
    }
  • 具体产品角色productB.php

    <?php 
    //具体产品角色B
     
    class productB implements Product
    {
        public function play()
        {
            // TODO: Implement play() method.
            echo 'productB play...';
        }
     
    }
  • 工厂角色Factory.php

    <?php
     // 工厂类
    require_once 'productA.php';
    require_once 'productB.php';
    class Factory
    {
        public function __construct($product)
        {
            if($product=='productA'){
                echo '工厂生产productA'.PHP_EOL;
                $pro= new productA();
                $pro->play();
            }elseif ($product=='productB'){
                echo '工厂生产productB'.PHP_EOL;
                $pro= new productB();
                $pro->play();
            }else{
                echo '工厂暂不生产';
            }
        }
    }.
  • 客户端使用

    <?php
    // 客户端
     
    require_once 'Factory.php';
    $factory=new Factory('productA');  // 输出productA play...
0

评论

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