简单工厂模式

简单工厂模式组成:

  1. 工厂类 :根据类型实例化具体服务者
  2. 抽象服务者父类:具体服务者的父类,规定提供的服务
  3. 具体服务者:真正的服务者

业务中时常会遇到类似于卖汽车的场景,一家4s店售卖多种类型的汽车,客户来买车,需要根据客户需求提给客户不同的车。

  <?php
  include('init.php');

  //汽车工厂类
  class CarFactory
  {
      public function createCar($carType)
      {
          switch ($carType)
          {
          case "BMW":
              $car = new Bmw();
              break;
          case "Tesla":
              $car = new Tesla();
              break;
          default:
              $car = new SanLun();
          }
          return $car;
      }
  }

  //汽车抽象类
  abstract class Car
  {
      abstract function run();
  }

  //宝马
  class Bmw extends Car
  {
      public function run()
      {
          echo "宝马就是快!\n";
      }
  }

  //特斯拉
  class Tesla extends Car
  {
      public function run()
      {
          echo "特斯拉电动车!\n";
      }
  }

  //三轮
  class SanLun extends Car
  {
        public function run()
      {
          echo "小小三轮,无敌风火轮!\n";
      }
  }

  class CarStore
  {
      public function BuyCar($type)
      {
          $carFactory = new CarFactory();
          $car = $carFactory->createCar($type);
          $car->run();
      }
  }

  $test = new CarStore();
  $test->BuyCar("sanlun");
  ?>

优点

1、简单工厂模式实现了对责任的分割,提供了专门的工厂类用于创建对象。

2、客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。

3、通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。

缺点

1、由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。

2、使用简单工厂模式将会增加系统中类的个数,在一定程序上增加了系统的复杂度和理解难度。

3、系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。

4、简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值