加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_潮州站长网 (http://www.0768zz.com/)- 物联安全、建站、操作系统、云计算、数据迁移!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

一起聊聊PHP中的计划模式

发布时间:2022-07-12 13:17:02 所属栏目:PHP教程 来源:互联网
导读:策略模式,又称为政策模式,属于行为型的设计模式。 GoF类图 1.jpg 代码实现 interface Strategy{ function AlgorithmInterface(); } class ConcreteStrategyA implements Strategy{ function AlgorithmInterface(){ echo 算法A; } } class ConcreteStrategy
  策略模式,又称为政策模式,属于行为型的设计模式。
  
  GoF类图
 
  1.jpg
 
  代码实现
 
  
  interface Strategy{
 
      function AlgorithmInterface();
 
  }
 
   
 
  class ConcreteStrategyA implements Strategy{
 
      function AlgorithmInterface(){
 
          echo "算法A";
 
      }
 
  }
 
   
 
  class ConcreteStrategyB implements Strategy{
 
      function AlgorithmInterface(){
 
          echo "算法B";
 
      }
 
  }
 
   
 
  class ConcreteStrategyC implements Strategy{
 
      function AlgorithmInterface(){
 
          echo "算法C";
 
      }
 
  }
 
  定义算法抽象及实现。
 
  
 
 
  class Context{
 
      private $strategy;
 
      function __construct(Strategy $s){
 
          $this->strategy = $s;
 
      }
 
      function ContextInterface(){
 
           
 
          $this->strategy->AlgorithmInterface();
 
      }
 
  }
 
  定义执行环境上下文。
 
 
  
 
  $strategyA = new ConcreteStrategyA();
 
  $context = new Context($strategyA);
 
  $context->ContextInterface();
 
   
 
  $strategyB = new ConcreteStrategyB();
 
  $context = new Context($strategyB);
 
  $context->ContextInterface();
 
   
 
  $strategyC = new ConcreteStrategyC();
 
  $context = new Context($strategyC);
 
  $context->ContextInterface();
 
  最后,在客户端按需调用合适的算法。
 
  是不是非常简单的一个设计模式。大家有没有发现这个模式和我们最早讲过的简单工厂非常类似
  那么他们的区别呢?
  工厂相关的模式属于创建型模式,顾名思义,这种模式是用来创建对象的,返回的是new出来的对象。要调用对象的什么方法是由客户端来决定的
  而策略模式属性行为型模式,通过执行上下文,将要调用的函数方法封装了起来,客户端只需要调用执行上下文的方法就可以了
  在这里,我们会发现,需要客户端来实例化具体的算法类,貌似还不如简单工厂好用,既然这样的话,大家何不尝试一下结合工厂和策略模式一起来实现一个模式呢?
  作为思考题将这个实现留给大家,提示:将Context类的__construct变成一个简单工厂方法
  既然和简单工厂如此的相像,那么我们也按照简单工厂的方式来说:我们是一个手机厂商(Client),想找某工厂(ConcreteStrategy)来做一批手机,通过渠道商(Context)向这个工厂下单制造手机,渠道商直接去联系代工厂(Strategy),并且直接将生产完成的手机发货给我(ContextInterface())。同样的,我不用关心他们的具体实现,我只要监督那个和我们联系的渠道商就可以啦,是不是很省心!

(编辑:我爱制作网_潮州站长网)

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

    热点阅读