巅云智能建站平台搭建版(创业流派版)火爆上线,毕生受权!新增:文章智能收罗+全站真静态打包+都会分站+智能小法式+不法词过滤+H5自顺应+智能链词等功效功效概况
赞助文档Help

轻松把握php设想形式之拜候者形式

一佰互联网站建造(www.taishanly.com) 宣布日期 2020-04-26 09:03:50 阅读数: 133

拜候者形式处理的题目

在咱们的代码编写进程傍边,常常须要对一些近似的工具增加一些的代码,咱们以一个计较机工具打印构成局部为例来看下:

  /**
  * 笼统基类
  */
  abstract class Unit
  {
    /**
    *获得称号
    */
    abstract public function getName();

  }

  /**
  * Cpu类
  */
  class Cpu extends Unit
  {
    public function getName()
    {
      return "i am cpu";
    }
  }

  /**
  * 内存类
  */
  class Memory extends Unit
  {
    public function getName()
    {
      return "i am memory";
    }
  }

  /**
  * 键盘类
  */
  class Keyboard extends Unit
  {
    public function getName()
    {
      return "i am keyboard";
    }
  }

  /**
  * 计较机类
  */
  class Computer
  {
    protected $_items = [];

    public function add(Unit $unit)
    {
      $this->_items[] = $unit;
    }

    public function print()
    {
      // 轮回打印各个构成局部
      foreach ($this->_items as $item) {
        $item->getName();
      }
    }
  }


这个时辰下面的代码看上去仿佛很完善的模样,可是题目来了,此刻咱们岂但须要打印构成局部,还须要保管各个组件到数据库,不只如斯,还须要打印各个组件的价钱;此时若是在Unit基类中增加getPrice()和save()体例,也能实现咱们想要的功效,可是如许做也存在题目,你并不晓得还须要新增甚么操纵,若是每新增一个操纵都用如许的体例来新增,咱们的类会变得愈来愈痴肥。

拜候者形式的实现

而拜候者形式便是为了处理这个题目的,他把数据布局和感化于布局之上的操纵之间的耦合摆脱开,使得操纵调集能够绝对自在的演变,咱们来看下面改进过得代码:

  /**
  * 笼统基类
  */
  abstract class Unit
  {
    /**
    * 获得称号
    */
    abstract public function getName();

    /**
    * 用来接管拜候者工具,回调拜候者的visit体例
    * 很是关头的体例
    */
    public function accept(Visitor $visitor)
    {
      $method = visit . get_class($this);
      if (method_exists($visitor, $method)) {
        $visitor->$method($this);
      }
    }
  }

  /**
  * Cpu类
  */
  class Cpu extends Unit
  {
    public function getName()
    {
      return "i am cpu";
    }
  }

  /**
  * Memory类
  */
  class Memory extends Unit
  {
    public function getName()
    {
      return "i am memory";
    }
  }

  /**
  * Keyboard类
  */
  class Keyboard extends Unit
  {
    public function getName()
    {
      return "i am keyboard";
    }
  }
  
  /**
  * Keyboard类
  */
  interface Visitor
  {
    public function visitCpu(Cpu $cpu);
    public function visitMemory(Memory $memory);
    public function visitKeyboard(Keyboard $keyboard);
  }

  /**
  * 
  */
  class PrintVisitor implements Visitor
  {
    public function visitCpu(Cpu $cpu)
    {
      echo "hello, " . $cpu->getName() . "
";
    }

    public function visitMemory(Memory $memory)
    {
      echo "hello, " . $memory->getName() . "
";
    }

    public function visitKeyboard(Keyboard $keyboard)
    {
      echo "hello, " . $keyboard->getName() . "
";
    }
  }

  /**
  * 
  */
  class Computer
  {
    protected $_items = [];

    public function add(Unit $unit)
    {
      $this->_items[] = $unit;
    }
    
    /**
    * 挪用各个组件的accept体例
    */
    public function accept(Visitor $visitor)
    {
      foreach ($this->_items as $item) {
        $item->accept($visitor);
      }
    }
  }

  $computer = new Computer();
  $computer->add(new Cpu());
  $computer->add(new Memory());
  $computer->add(new Keyboard());

  $printVisitor = new PrintVisitor();
  $computer->print($printVisitor);

  // 以上的代码将打印出  
  hello, i am cpu
  hello, i am memory
  hello, i am keyboard

总结

颠末下面的改进以后,咱们要扩大就变得很是轻易,若是咱们须要新增保管到数据库的体例,能够在新增一个实现了Visitor的类,比方SaveVisitor,在该类中来实现保管的体例,即是咱们把该类和该类中的一些操纵解藕了出来,而调集了类操纵的工具便是拜候者。

以上便是本文的全数内容,但愿对大师的进修有所赞助,也但愿大师多多撑持网页设想。

一佰互联是天下着名建站品牌办事商,咱们有九年、网站建造、网页设想、php开辟和域名注册及假造主机办事经历,供给的办事更是天下着名。最近几年来还整合团队上风自立开辟了可视化多用户”“3.0平台版,拖拽排版网站建造设想,轻松实现pc站、手机微网站、小法式、APP一体化全网营销网站扶植 ,已胜利的为天下上百家收集公司供给自助建站平台搭建办事。

相干消息more

21
04月
纯CSS实现radio和checkbox实现

radio-and-checkbox纯CSS实现radio和checkbox实现结果reset-radio在开辟PC真个名目时,常常会用到r... >>概况

30
04月
php session宁静题目阐发

是以,咱们首要处理的思绪是效验session ID的有用性. 以下为援用的内容: 复制代码 代码以下: <?php if(!isset... >>概况

20
04月
Html5挪用手机摄像头并实现人脸辨认的实现

需要夹杂App开辟,原生壳子+webApp,在web局部挪用原生摄像头功效并且在网页指定地区显现摄像头内容,同时能够手动摄影并停止人脸辨认,... >>概况

12
05月
专业网站扶植赞助企业顺遂发明

此刻是一个合作剧烈的社会,企业公司之间都存在了很大的压力和合作力,为了更好的生长,人们会经由过程网站来进步本身企业公司的着名度,此中专业网站扶植... >>概况

高端网站扶植

美工统筹SEO,为企业电子商务营销助力!

德律风:

023-85725751
建站

产物

域名注册 假造主机 云办事器 企业邮局
智能建站 APP打包 微站/小法式 创业平台
网站推行 媒体营销 智能收罗 AI机械人
400德律风 短信营销 店销机械人
私家定制 流派网站