亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

php設計模式之委托模式

2024-05-04 23:42:55
字體:
來源:轉載
供稿:網友
這篇文章主要為大家詳細介紹了php設計模式之委托模式,以一個實例為大家介紹了php委托模式,感興趣的朋友可以參考一下
 

委托模式是軟件設計模式中的一項基本技巧。在委托模式中,有兩個對象參與處理同一個請求,接受請求的對象將請求委托給另一個對象來處理。委托模式是一項基本技巧,許多其他的模式,如狀態模式、策略模式、訪問者模式本質上是在更特殊的場合采用了委托模式。
動態委托的介紹:動態委托概念來自于Jakarta 字節碼工程庫 (Byte-Code Engineering Library, BCEL)。它能夠分析存在的類,并且對于接口,抽象類,甚至運行時的具體類來說,它能夠生成以字節編碼委托類。
被委托的接口/類應該滿足如下條件:動態委托最多只能委托一個類,但是能夠代理多個接口。這個限制來自于Java的單繼承模式。一個Java類最多只有一個父類。既然生成的委托類把被委托類作為它的父類,那么指定多個被委托類是不合理的。如果沒有指定被委托類,那么缺省的父類就是Object。
下面是PHP 反射機制實現動態代理的代碼:

<?phpclass Fruit{  function callFruit()  {    print "Generate an Apple";  }}class FruitDelegator{ private $targets;  function __construct()  {    $this->target[] = new Fruit();  }    function __call($name, $args)  {    foreach ($this->target as $obj)    {      $r = new ReflectionClass($obj);      if ($method = $r->getMethod($name))      {        if ($method->isPublic() && !$method->isAbstract())        {          return $method->invoke($obj, $args);        }      }    }  }}$obj = new FruitDelegator();$obj->callFruit();// 運行結果// Generate an Apple?>

可見,通過代理類FruitDelegator來代替Fruit類來實現他的方法。
同樣的,如下的代碼也是能夠運行的:

<?phpclass Color{  function callColor()  {    print "Generate Red";  }} class ColorDelegator{  private $targets;     function addObject($obj)  {    $this->target[] = $obj;  }     function __call($name, $args)  {    foreach ($this->target as $obj)    {      $r = new ReflectionClass($obj);      if ($method = $r->getMethod($name))      {        if ($method->isPublic() && !$method->isAbstract())        {          return $method->invoke($obj, $args);        }      }    }  }}$obj = new ColorDelegator();$obj->addObject(new Color());$obj->callColor();?>

設計了一個cd類,類中有mp3播放模式,和mp4播放模式
改進前,使用cd類的播放模式,需要在實例化的類中去判斷選擇什么方式的播放模式 
改進后,播放模式當做一個參數傳入playList函數中,就自動能找到對應需要播放的方法。

一、未改進前

<?php //使用委托模式之前,調用cd類,選擇cd播放模式是復雜的選擇過程 class cd {  protected $cdInfo = array();    public function addSong($song) {   $this->cdInfo[$song] = $song;  }    public function playMp3($song) {   return $this->cdInfo[$song] . '.mp3';  }    public function playMp4($song) {   return $this->cdInfo[$song] . '.mp4';  } } $oldCd = new cd; $oldCd->addSong("1"); $oldCd->addSong("2"); $oldCd->addSong("3"); $type = 'mp3'; if ($type == 'mp3') {  $oldCd->playMp3(); } else {  $oldCd->playMp4(); }

二、通過委托模式,改進后的cd類

<?php namespace Tools; /*委托模式去除核心對象中的判決和復雜功能性*/ //委托接口interface Delegate{ public function playList($list,$song);} //mp3處理類class mp3 implements Delegate{ public function playList($list,$song){  return $list[$song].'.mp3'; }} //mp4處理類class mp4 implements Delegate{ public function playList($list, $song) {  return $list[$song].'.mp4'; }} class cdDelegate{ protected $cdInfo = array();  public function addSong($song){  $this->cdInfo[$song] = $song; }  public function play($type,$song){  $name = '/Tools//'.$type;  $obj = new $name;  return $obj->playList($this->cdInfo,$song); }} $newCd = new cdDelegate();$newCd->addSong("1");$newCd->addSong("2");$newCd->addSong("3");echo $newCd->play('mp3','1');//只要傳遞參數就能知道需要選擇何種播放模式

再為大家分享一個實例:

<?php/** * 委托模式 示例 * * @create_date: 2010-01-04 */class PlayList{ var $_songs = array(); var $_object = null;  function PlayList($type) {  $object = $type."PlayListDelegation";  $this->_object = new $object(); }  function addSong($location,$title) {  $this->_songs[] = array("location"=>$location,"title"=>$title); }  function getPlayList() {  return $this->_object->getPlayList($this->_songs); }} class mp3PlayListDelegation{ function getPlayList($songs) {  $aResult = array();  foreach($songs as $key=>$item)  {   $path = pathinfo($item['location']);   if(strtolower($item['extension']) == "mp3")   {    $aResult[] = $item;   }  }  return $aResult; }} class rmvbPlayListDelegation{ function getPlayList($songs) {  $aResult = array();  foreach($songs as $key=>$item)  {   $path = pathinfo($item['location']);   if(strtolower($item['extension']) == "rmvb")   {    $aResult[] = $item;   }  }  return $aResult; }} $oMP3PlayList = new PlayList("mp3");$oMP3PlayList->getPlayList();$oRMVBPlayList = new PlayList("rmvb");$oRMVBPlayList->getPlayList();?>

以上就是本文的全部內容,希望對大家的學習有所幫助。



注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品免费看| 欧美风情在线观看| 精品久久久在线观看| 欧美激情a在线| 日韩视频免费在线观看| 中文字幕综合一区| 成人精品久久av网站| 性欧美长视频免费观看不卡| 日韩精品视频在线观看免费| 国产91免费观看| 亚洲欧美激情精品一区二区| 国产suv精品一区二区| 国内精品国产三级国产在线专| 久久五月情影视| 亚洲欧美999| 日韩免费在线视频| 久久6免费高清热精品| 九九热最新视频//这里只有精品| 久久久久久久电影一区| 国色天香2019中文字幕在线观看| 亚洲午夜精品久久久久久久久久久久| 中文字幕精品影院| 国内偷自视频区视频综合| 久久久这里只有精品视频| 国产精品欧美激情在线播放| 国产精品视频地址| 久久精品国产99国产精品澳门| 欧美亚洲国产日韩2020| 成人免费网视频| 亚洲成人中文字幕| 91视频8mav| 亚洲乱码一区二区| 亚洲变态欧美另类捆绑| 亚洲成人1234| 国产日韩欧美日韩| 欧美最猛黑人xxxx黑人猛叫黄| 欧美另类极品videosbestfree| 欧美诱惑福利视频| 国产精品视频在线观看| 精品高清一区二区三区| 欧美中文字幕在线观看| 91久久国产精品| 日韩久久精品电影| 日韩美女写真福利在线观看| 综合国产在线观看| 丝袜亚洲另类欧美重口| 欧美激情亚洲激情| 伊人av综合网| 欧美在线性爱视频| 日韩欧美大尺度| 欧美性资源免费| 人九九综合九九宗合| 亚洲一区二区三区四区视频| 国产偷国产偷亚洲清高网站| 国产在线观看91精品一区| 欧美高清videos高潮hd| 国产成人久久精品| 伊人激情综合网| 亚洲欧美自拍一区| 国产亚洲a∨片在线观看| 91成品人片a无限观看| 久久视频国产精品免费视频在线| 91在线观看免费高清| 久久久久中文字幕| 久久久91精品国产一区不卡| 国产精品一区专区欧美日韩| 91精品久久久久久久久久另类| 亚洲春色另类小说| 亚洲性69xxxbbb| 欧美日韩国产精品一区二区不卡中文| 91免费精品国偷自产在线| 国产日韩欧美一二三区| 欧美激情第一页xxx| 国产精品视频精品| 欧美激情精品久久久久久免费印度| 欧美激情视频在线免费观看 欧美视频免费一| 久久久www成人免费精品| 久热99视频在线观看| 91国偷自产一区二区三区的观看方式| 午夜精品久久久久久99热软件| 亚洲精品一区av在线播放| 国产精品国产福利国产秒拍| 亚洲国产精品成人一区二区| 91成人天堂久久成人| 69av成年福利视频| 性色av一区二区三区红粉影视| 日韩激情在线视频| 国产视频精品一区二区三区| 色www亚洲国产张柏芝| 岛国视频午夜一区免费在线观看| 欧美国产亚洲精品久久久8v| 成人免费网视频| 91啪国产在线| 国产精欧美一区二区三区| 亚洲少妇激情视频| 欧美日韩另类字幕中文| 国产精品久久久久久影视| 中文字幕亚洲综合| 亚洲精品在线91| 欧美激情精品久久久| 亚洲欧美激情精品一区二区| 亚洲视频在线看| 亚洲香蕉在线观看| 欧美福利视频在线| 国产精品入口夜色视频大尺度| 中文字幕亚洲欧美日韩高清| 欧美成人免费网| 成人久久精品视频| 精品少妇v888av| 久久久久久久久中文字幕| 国产精品女人久久久久久| 日韩精品极品毛片系列视频| 日本精品在线视频| 日韩电影中文字幕| 日韩大陆欧美高清视频区| 亚洲天堂网在线观看| 伊人伊成久久人综合网站| 欧美日韩精品在线| 成人在线免费观看视视频| 中文字幕最新精品| 亚洲国产精品yw在线观看| 91亚洲va在线va天堂va国| 亚洲久久久久久久久久久| 日韩欧美有码在线| 国产丝袜精品视频| 国产精品欧美激情| 欧美黑人一级爽快片淫片高清| 亚洲国产精品va在线观看黑人| 成人黄色免费在线观看| 国产精品电影网| 国产视频精品自拍| 色视频www在线播放国产成人| 91精品视频在线| 91精品国产91久久| 亚洲自拍偷拍色片视频| 久久最新资源网| 亚洲欧美日韩图片| 亚洲精品suv精品一区二区| 国产色婷婷国产综合在线理论片a| 亚洲美女视频网站| 91久久精品视频| 久久精品电影网站| 在线观看欧美视频| 91系列在线播放| 久久中文字幕视频| 久久97精品久久久久久久不卡| 亚洲一区二区三区乱码aⅴ蜜桃女| 日韩一区二区av| 色综合久久中文字幕综合网小说| 日韩美女主播视频| 日韩av免费在线看| 在线视频欧美日韩精品| 国产偷国产偷亚洲清高网站| 在线电影中文日韩| 欧美日韩在线免费观看| 亚洲成年人在线播放| 精品日韩中文字幕| 国产美女直播视频一区| 91超碰中文字幕久久精品| 国产亚洲欧美aaaa| 国产在线观看一区二区三区| 日韩电影免费观看在线| 久久6精品影院| 亚洲国产精品视频在线观看|