加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

浅谈PHP中的工厂技巧模式

发布时间:2022-07-16 15:11:58 所属栏目:PHP教程 来源:互联网
导读:本篇文章带大家了解一下PHP设计模式中的工厂方法模式。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 GoF类图解释 工厂方法模式对比简单工厂来说,最核心的一点,其实就是将实现推迟到子类。怎么理解呢?我们可以将上回的简单工厂当做
  本篇文章带大家了解一下PHP设计模式中的工厂方法模式。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
 
  
  GoF类图解释
  工厂方法模式对比简单工厂来说,最核心的一点,其实就是将实现推迟到子类。怎么理解呢?我们可以将上回的简单工厂当做父类,然后有一堆子类去继承它。createProduct()这个方法在父类中也变成一个抽象方法。然后所有的子类去实现这个方法,不再需要用switch去判断,子类直接返回一个实例化的对象即可。
 
  GoF定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化推迟到其子类。
 
  GoF类图:
 
  1.gif
 
  类图中的Product为产品
  类图中的Creator为创建者
  创建者父类有一个抽象的FactoryMethod()工厂方法
  所有创建者子类需要实现这个工厂方法,返回对应的具体产品
  创建者父类可以有一个AnOperation()操作方法,直接返回product,可以使用FactoryMethod()去返回,这样外部只需要统一调用AnOperation()
  代码实现
 
  首先是商品相关的接口和实现类,和简单工厂的类似:
 
  
  interface Product{
 
      function show() : void;
 
  }
 
   
 
  // 商品实现类A
 
  class ConcreteProductA implements Product{
 
      public function show() : void{
 
          echo "I'm A.n";
 
      }
 
  }
 
  接下来是创建者的抽象和实现类:
 
 
  
  // 创建者抽象类
 
  abstract class Creator{
  
   
 
  // 创建者实现类A
 
  class ConcreteCreatorA extends Creator{
 
      // 实现操作方法
 
      protected function FactoryMethod() : Product{
 
          return new ConcreteProductA();
 
      }
 
  }
 
  这里和简单工厂就有了本质的区别,我们去掉了恶心的switch,让每个具体的实现类来进行商品对象的创建。没错,单一和封闭,每个单独的创建者子类只在工厂方法中和一个商品有耦合,有没有其他商品和其他的工厂来跟客户合作过这个子类完全不知道。
 
  同样还是拿手机来比喻:我是一个卖手机的批发商(客户Client,业务方),我需要一批手机(产品ProductA),于是我去让富X康(工厂Creator)来帮我生产。我跟富士康说明了需求,富士康说好的,让我的衡阳工厂(ConcreteCreatorA)来搞定,不需要总厂上,你这小单子,洒洒水啦。然后过了一阵我又需要另一种型号的手机(产品ProductB),富士康看了看后又让郑州富士康(ConcreteCreatorB)来帮我生产。反正不管怎么样,他们总是给了我对应的手机。而且郑州工厂并不知道衡阳工厂生产过什么或者有没有跟我合作过,这一切只有我和总工厂知道。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读