国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > PHP > 正文

php 適配器模式的學(xué)習(xí)筆記

2024-09-04 11:43:50
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

適配器模式許多和php程序員都沒(méi)有碰到關(guān)于適配器的應(yīng)用了,這里小編整理了兩個(gè)關(guān)于適配器的使用例子,下面我們就一起來(lái)看看吧,希望各位有幫助。

【目的】:將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口,Adapter模式使得原來(lái)由于接口不兼容而不能一起工作的那此類可以一起工作

【主要角色】

目標(biāo)(Target)角色:定義客戶端使用的與特定領(lǐng)域相關(guān)的接口,這也就是我們所期待得到的

源(Adaptee)角色:需要進(jìn)行適配的接口

適配器(Adapter)角色:對(duì)Adaptee的接口與Target接口進(jìn)行適配;適配器是本模式的核心,適配器把源接口轉(zhuǎn)換成目標(biāo)接口,此角色為具體類

【適用性】

1、你想使用一個(gè)已經(jīng)存在的類,而它的接口不符合你的需求

2、你想創(chuàng)建一個(gè)可以復(fù)用的類,該類可以與其他不相關(guān)的類或不可預(yù)見(jiàn)的類協(xié)同工作

3、你想使用一個(gè)已經(jīng)存在的子類,但是不可能對(duì)每一個(gè)都進(jìn)行子類化以匹配它們的接口。對(duì)象適配器可以適配它的父類接口(僅限于對(duì)象適配器)

  1. //目標(biāo)角色   
  2. interface Target {   
  3.     public function simpleMethod1();   
  4.     public function simpleMethod2();   
  5. }   
  6.    
  7. //源角色   
  8. class Adaptee {   
  9.        
  10.     public function simpleMethod1(){   
  11.         echo 'Adapter simpleMethod1'."<br>";   
  12.     }   
  13. }   
  14.    
  15. //類適配器角色   
  16. class Adapter implements Target {   
  17.     private $adaptee;   
  18.        
  19.        
  20.     function __construct(Adaptee $adaptee) {   
  21.         $this->adaptee = $adaptee;    
  22.     }   
  23.        
  24.     //委派調(diào)用Adaptee的sampleMethod1方法   
  25.     public function simpleMethod1(){   
  26.         echo $this->adaptee->simpleMethod1();   
  27.     }   
  28.        
  29.     public function simpleMethod2(){   
  30.         echo 'Adapter simpleMethod2'."<br>";      
  31.     }    
  32.        
  33. }   
  34.    
  35. //客戶端   
  36. class Client {   
  37.        
  38.     public static function main() {   
  39.         $adaptee = new Adaptee();   
  40.         $adapter = new Adapter($adaptee);   
  41.         $adapter->simpleMethod1();   
  42.         $adapter->simpleMethod2();    
  43.     }   //Vevb.com 
  44. }   
  45.    
  46. Client::main(); 

【運(yùn)行結(jié)果】

Adapter simpleMethod1

Adapter simpleMethod2

例子2:生活中最常見(jiàn)到的足球換人機(jī)制:

  1. <?php 
  2. /** 
  3. * Created by PhpStorm. 
  4. */ 
  5. //-------------抽象接口--------------- 
  6. /**抽象運(yùn)動(dòng)員 
  7. * Interface IPlayer 
  8. */ 
  9. interface SoccerPlayer 
  10. function Attack(); 
  11. function Defense(); 
  12.  
  13. /**前鋒 
  14. * Class Forward 
  15. */ 
  16. class Forward implements SoccerPlayer 
  17.  
  18. function Attack() 
  19. echo "前鋒攻擊<br/>"
  20.  
  21. function Defense() 
  22. echo "前鋒防御<br/>"
  23.  
  24. /**中鋒 
  25. * Class Center 
  26. */ 
  27. class Center implements SoccerPlayer 
  28.  
  29. function Attack() 
  30. echo "中鋒攻擊<br/>"
  31.  
  32. function Defense() 
  33. echo "中鋒防御<br/>"
  34.  
  35. //--------------待適配對(duì)象----------- 
  36. /**梅西 剛進(jìn)入罷賽的運(yùn)動(dòng)員 
  37. * Class Yaoming 
  38. */ 
  39. class Messi 
  40. function 進(jìn)攻() 
  41. echo "梅西進(jìn)攻<br/>"
  42.  
  43. function 防御() 
  44. echo "梅西防御<br/>"
  45.  
  46. //------------適配器-------------- 
  47. /**適配器 
  48. * Class Adapter 
  49. */ 
  50. class Adapter implements SoccerPlayer 
  51. private $_player
  52. //Vevb.com 
  53. function __construct() 
  54. $this->_player=new Messi(); 
  55.  
  56. function Attack() 
  57. $this->_player->進(jìn)攻(); 
  58.  
  59. function Defense() 
  60. $this->_player->防御(); 
  61. //測(cè)試如下: 
  62. $player1=new Forward(); 
  63.  
  64. echo "前鋒上場(chǎng):<br/>"
  65. $player1->Attack(); 
  66. $player1->Defense(); 
  67.  
  68. echo "<hr/><br/>"
  69.  
  70. echo "梅西上場(chǎng):<br/>"
  71. $Messi=new Adapter(); 
  72. $Messi->Attack(); 
  73. $Messi->Defense(); 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 甘德县| 元阳县| 威海市| 郸城县| 阿勒泰市| 天水市| 双辽市| 荔浦县| 巴林右旗| 白银市| 青龙| 漾濞| 云林县| 南昌市| 深州市| 玉山县| 沅江市| 新安县| 扎兰屯市| 左贡县| 乐安县| 靖边县| 东兰县| 南和县| 吴旗县| 泾川县| 蕉岭县| 枝江市| 忻城县| 白玉县| 陇川县| 仁怀市| 南溪县| 霍山县| 咸阳市| 卫辉市| 菏泽市| 叶城县| 庆安县| 德阳市| 云林县|