婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > php設計模式之適配器模式原理、用法及注意事項詳解

php設計模式之適配器模式原理、用法及注意事項詳解

熱門標簽:青白江地圖標注 聊城電話外呼系統(tǒng)公司 銅川電話機器人價格 沛縣400電話辦理 德陽中江如何申請400開頭電話 AI電話機器人OEM貼牌 智能電話機器人好公司門薩維 辦理重慶400電話 江蘇電商外呼系統(tǒng)運營商

本文實例講述了php設計模式之適配器模式原理、用法及注意事項。分享給大家供大家參考,具體如下:

在這個有沒有對象都要高呼“面向對象”的年代,掌握面向對象會給我們帶來意想不到的方便。學編程的小伙伴從開始能寫幾行代碼實現(xiàn)簡單功能到后來懂得將一些重復的操作組合起來形成一個“函數(shù)”,再到后來將“函數(shù)”和屬性組合起來形成一個“類”。一步步走來,我們在考慮著機器運行代碼效率的提高的同時也在考慮減輕程序員的工作量。 那么我們今天講到的適配器模型更著重考慮的是什么呢?是程序員工作量。

什么時候會用到適配器模式?

其實最簡單的例子是當我們引用一個第三方類庫。這個類庫隨著版本的改變,它提供的API也可能會改變。如果很不幸的是,你的應用里引用的某個API已經發(fā)生改變的時候,除了在心中默默地罵“wocao”之外,你還得去硬著頭皮去改大量的代碼。

難道真的一定要如此嗎?按照套路來說,我會回答“不是的”。我們有適配器模式啊~~

當接口發(fā)生改變時,適配器模式就派上了用場。

舉個栗子

如果通過上面的簡單描述,你都能懂,那在下只能佩服你的領悟能力超群了。一般人一定還是不知所云。為了方便理解,我引用一位博友的例子。原文地址。

一開始的和諧

黑棗玩具公司專門生產玩具,生產的玩具不限于狗、貓、獅子,魚等動物。每個玩具都可以進行“張嘴”與“閉嘴”操作,分別調用了openMouth與closeMouth方法。

在這個時候,我們很容易想到可以第一定義一個抽象類Toy,甚至是接口Toy,這些問題不大,其他的類去繼承父類,實現(xiàn)父類的方法。一片和諧,信心向榮。

平衡的破壞

為了擴大業(yè)務,現(xiàn)在黑棗玩具公司與紅棗遙控公司合作,紅棗遙控公司可以使用遙控設備對動物進行嘴巴控制。不過紅棗遙控公司的遙控設備是調用的動物的doMouthOpen及doMouthClose方法。黑棗玩具公司的程序員現(xiàn)在必須要做的是對Toy系列類進行升級改造,使Toy能調用doMouthOpen及doMouthClose方法。

考慮實現(xiàn)的方法時,我們很直接地想到,你需要的話我再在我的父類子類里給你添加這么兩個方法就好啦。當你一次又一次在父類子類里面重復添加著這兩個方法的時候,總會想著如此重復的工作,難道不能解決么?當有數(shù)百個子類的時候,程序員會改瘋的。程序員往往比的是誰在不影響效率的時候更會“偷懶”。這樣做下去程序員會覺得自己很傻。(其實我經常當這樣的傻子)

abstract class Toy
{
  public abstract function openMouth();
  public abstract function closeMouth();
  //為紅棗遙控公司控制接口增加doMouthOpen方法
  public abstract function doMouthOpen();
  //為紅棗遙控公司控制接口增加doMouthClose方法
  public abstract function doMouthClose();
}
class Dog extends Toy
{
  public function openMouth()
  {
    echo "Dog open Mouth\n";
  }
  public function closeMouth()
  {
    echo "Dog open Mouth\n";
  }
  //增加的方法
  public function doMouthOpen()
  {
    $this->doMouthOpen();
  }
  //增加的方法
  public function doMouthClose()
  {
    $this->closeMouth();
  }
}
class Cat extends Toy
{
  public function openMouth()
  {
    echo "Cat open Mouth\n";
  }
  public function closeMouth()
  {
    echo "Cat open Mouth\n";
  }
  //增加的方法
  public function doMouthOpen()
  {
    $this->doMouthOpen();
  }
  //增加的方法
  public function doMouthClose()
  {
    $this->closeMouth();
  }
}

更加煩躁

程序員剛剛碼完代碼,喝了口水,突然間另一個消息傳來。

黑棗玩具公司也要與綠棗遙控公司合作,因為綠棗遙控公司遙控設備更便宜穩(wěn)定。不過綠棗遙控公司的遙控設備是調用的動物的operMouth(type)方法來實現(xiàn)嘴巴控制。如果type)方法來實現(xiàn)嘴巴控制。如果type為0則“閉嘴”,反之張嘴。

這下好了,程序員又得對Toy及其子類進行升級,使Toy能調用operMouth()方法。擱誰都不淡定了。

abstract class Toy
{
  public abstract function openMouth();
  public abstract function closeMouth();
  public abstract function doMouthOpen();
  public abstract function doMouthClose();
  //為綠棗遙控公司控制接口增加doMouthClose方法
  public abstract function operateMouth($type = 0);
}
class Dog extends Toy
{
  public function openMouth()
  {
    echo "Dog open Mouth\n";
  }
  public function closeMouth()
  {
    echo "Dog open Mouth\n";
  }
  public function doMouthOpen()
  {
    $this->doMouthOpen();
  }
  public function doMouthClose()
  {
    $this->closeMouth();
  }
  public function operateMouth($type = 0)
  {
    if ($type == 0) {
      $this->closeMouth();
    } else {
      $this->operateMouth();
    }
  }
}
class Cat extends Toy
{
  public function openMouth()
  {
    echo "Cat open Mouth\n";
  }
  public function closeMouth()
  {
    echo "Cat open Mouth\n";
  }
  public function doMouthOpen()
  {
    $this->doMouthOpen();
  }
  public function doMouthClose()
  {
    $this->closeMouth();
  }
  public function operateMouth($type = 0)
  {
    if ($type == 0) {
      $this->closeMouth();
    } else {
      $this->operateMouth();
    }
  }
}

在這個時候,程序員必須要動腦子想辦法了,就算自己勤快,萬一哪天紫棗青棗黃棗山棗這些遙控公司全來的時候,忽略自己不斷增多的工作量不說,這個Toy類可是越來越大,總有一天程序員不崩潰,系統(tǒng)也會崩潰。

問題在出在哪里呢?

像上面那樣編寫代碼,代碼實現(xiàn)違反了“開-閉”原則,一個軟件實體應當對擴展開放,對修改關閉。即在設計一個模塊的時候,應當使這個模塊可以在不被修改的前提下被擴展。也就是說每個尸體都是一個小王國,你讓我參與你的事情這個可以,但你不能修改我的內部,除非我的內部代碼確實可以優(yōu)化。

在這種想法下,我們懂得了如何去用繼承,如何利用多態(tài),甚至如何實現(xiàn)“高內聚,低耦合”。

回到這個問題,我們現(xiàn)在面臨這么一個問題,新的接口方法我要實現(xiàn),舊的接口(Toy抽象類)也不能動,那么總得有個解決方法吧。那就是引入一個新的類--我們本文的主角--適配器。  適配器要完成的功能很明確,引用現(xiàn)有接口的方法實現(xiàn)新的接口的方法。更像它名字描述的那樣,你的接口不改的話,我就利用現(xiàn)有接口和你對接一下吧。

到此,解決方法已經呼之欲出了,下面貼上代碼。

?php
abstract class Toy
{
  public abstract function openMouth();
  public abstract function closeMouth();
}
class Dog extends Toy
{
  public function openMouth()
  {
    echo "Dog open Mouth\n";
  }
  public function closeMouth()
  {
    echo "Dog close Mouth\n";
  }
}
class Cat extends Toy
{
  public function openMouth()
  {
    echo "Cat open Mouth\n";
  }
  public function closeMouth()
  {
    echo "Cat close Mouth\n";
  }
}
//目標角色:紅棗遙控公司
interface RedTarget
{
  public function doMouthOpen();
  public function doMouthClose();
}
//目標角色:綠棗遙控公司及
interface GreenTarget
{
  public function operateMouth($type = 0);
}
//類適配器角色:紅棗遙控公司
class RedAdapter implements RedTarget
{
  private $adaptee;
  function __construct(Toy $adaptee)
  {
    $this->adaptee = $adaptee;
  }
  //委派調用Adaptee的sampleMethod1方法
  public function doMouthOpen()
  {
    $this->adaptee->openMouth();
  }
  public function doMouthClose()
  {
    $this->adaptee->closeMouth();
  }
}
//類適配器角色:綠棗遙控公司
class GreenAdapter implements GreenTarget
{
  private $adaptee;
  function __construct(Toy $adaptee)
  {
    $this->adaptee = $adaptee;
  }
  //委派調用Adaptee:GreenTarget的operateMouth方法
  public function operateMouth($type = 0)
  {
    if ($type) {
      $this->adaptee->openMouth();
    } else {
      $this->adaptee->closeMouth();
    }
  }
}
class testDriver
{
  public function run()
  {
     //實例化一只狗玩具
    $adaptee_dog = new Dog();
    echo "給狗套上紅棗適配器\n";
    $adapter_red = new RedAdapter($adaptee_dog);
    //張嘴
    $adapter_red->doMouthOpen();
    //閉嘴
    $adapter_red->doMouthClose();
    echo "給狗套上綠棗適配器\n";
    $adapter_green = new GreenAdapter($adaptee_dog);
    //張嘴
    $adapter_green->operateMouth(1);
    //閉嘴
    $adapter_green->operateMouth(0);
  }
}
$test = new testDriver();
$test->run();

最后的結果就是,Toy類及其子類在不改變自身的情況下,通過適配器實現(xiàn)了不同的接口。

最后總結

將一個類的接口轉換成客戶希望的另外一個接口,使用原本不兼容的而不能在一起工作的那些類可以在一起工作.

適配器模式核心思想:把對某些相似的類的操作轉化為一個統(tǒng)一的“接口”(這里是比喻的說話)--適配器,或者比喻為一個“界面”,統(tǒng)一或屏蔽了那些類的細節(jié)。適配器模式還構造了一種“機制”,使“適配”的類可以很容易的增減,而不用修改與適配器交互的代碼,符合“減少代碼間耦合”的設計原則。

更多關于PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《php字符串(string)用法總結》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

您可能感興趣的文章:
  • PHP設計模式之適配器模式(Adapter)原理與用法詳解
  • php設計模式 Adapter(適配器模式)
  • PHP設計模式之適配器模式代碼實例
  • 學習php設計模式 php實現(xiàn)適配器模式
  • PHP設計模式之適配器模式原理與用法分析
  • PHP設計模式之適配器模式定義與用法詳解
  • php設計模式之適配器模式實例分析【星際爭霸游戲案例】
  • PHP設計模式(四)原型模式Prototype實例詳解【創(chuàng)建型】
  • PHP設計模式(三)建造者模式Builder實例詳解【創(chuàng)建型】
  • PHP設計模式(一)工廠模式Factory實例詳解【創(chuàng)建型】
  • PHP設計模式概論【概念、分類、原則等】
  • PHP設計模式(五)適配器模式Adapter實例詳解【結構型】

標簽:赤峰 鷹潭 濟寧 南寧 三亞 迪慶 烏魯木齊 山南

巨人網絡通訊聲明:本文標題《php設計模式之適配器模式原理、用法及注意事項詳解》,本文關鍵詞  php,設計模式,之,適配器,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《php設計模式之適配器模式原理、用法及注意事項詳解》相關的同類信息!
  • 本頁收集關于php設計模式之適配器模式原理、用法及注意事項詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    99国产精品视频免费观看| 综合欧美亚洲日本| 免费人成在线不卡| 亚洲欧美日韩一区二区三区在线观看| 91精品黄色片免费大全| 国产精品一级片| 在线免费观看成人短视频| 九色综合狠狠综合久久| 欧美日韩精品一区二区三区| www.日本不卡| 日本成人中文字幕| 国产精品免费久久| 欧美日韩情趣电影| 男女性色大片免费观看一区二区| 日韩一区二区三区电影| 国产乱码字幕精品高清av| 亚洲男人的天堂在线观看| 欧美午夜不卡在线观看免费| 亚洲一区二区美女| 欧美国产一区二区在线观看| 在线电影院国产精品| 99久久久精品| 国产一区二区三区蝌蚪| 婷婷国产v国产偷v亚洲高清| 国产精品久久午夜| 精品久久一区二区| 制服丝袜中文字幕一区| 久久久影院官网| 欧美精选午夜久久久乱码6080| 成人一区二区三区在线观看| 亚洲少妇中出一区| 国产日韩成人精品| 日韩免费性生活视频播放| 丁香亚洲综合激情啪啪综合| 亚洲成人精品在线观看| 国产日韩高清在线| 欧美在线免费观看视频| 国产麻豆精品久久一二三| 亚洲精品免费在线播放| 日韩女优电影在线观看| 欧美色电影在线| 国产+成+人+亚洲欧洲自线| 亚洲色图另类专区| 欧美mv日韩mv国产| 91麻豆精品91久久久久同性| 91视频国产资源| 国产精品一区二区视频| 麻豆一区二区三| 一区二区三区在线免费| 欧美在线一区二区三区| 色女孩综合影院| 欧洲一区二区三区免费视频| 91麻豆精品秘密| 91精品福利视频| 欧美日韩免费电影| 91麻豆精品国产综合久久久久久| 欧美日韩久久久| 欧美一级黄色片| 久久综合中文字幕| 2017欧美狠狠色| 国产欧美一区二区三区鸳鸯浴 | 国产色一区二区| 久久久精品黄色| 国产日韩精品久久久| 欧美极品另类videosde| 欧美高清一级片在线观看| 久久久99久久| 91麻豆精品国产| 欧美xxxxxxxx| 欧美一级国产精品| 一区二区免费在线| 26uuu亚洲综合色欧美| 久久久九九九九| 亚洲欧美日韩电影| 亚瑟在线精品视频| 日韩一区日韩二区| 日韩激情视频网站| 成人毛片视频在线观看| 成人午夜碰碰视频| 欧洲精品一区二区| 欧美精品一区二区三区一线天视频| 欧美亚洲尤物久久| 欧美tickling挠脚心丨vk| |精品福利一区二区三区| 婷婷亚洲久悠悠色悠在线播放| 国内精品国产三级国产a久久| 9久草视频在线视频精品| 欧美日韩一区二区三区视频| 久久女同精品一区二区| 亚洲国产精品久久人人爱| 国产精品综合久久| 日本麻豆一区二区三区视频| 波多野结衣一区二区三区| 91精品欧美综合在线观看最新| 国产精品乱人伦一区二区| 日韩成人一区二区| 色妹子一区二区| 国产色产综合色产在线视频| 亚洲少妇30p| 国产乱码精品一区二区三区五月婷| 欧美在线视频你懂得| 国产精品久久三区| 国产在线视频精品一区| 欧美日韩一区高清| 国产精品国产a级| 黄色成人免费在线| 欧美精品在欧美一区二区少妇| 亚洲日本青草视频在线怡红院 | 免费精品99久久国产综合精品| 成人视屏免费看| 26uuu久久天堂性欧美| 26uuu精品一区二区在线观看| 自拍av一区二区三区| 国产精品综合网| 日韩精品最新网址| 日本欧美久久久久免费播放网| 91成人免费在线视频| 亚洲欧洲美洲综合色网| 国产成都精品91一区二区三| 日韩欧美色综合| 免费视频一区二区| 欧美欧美欧美欧美首页| 亚洲成av人片在线观看| 日本韩国精品在线| 亚洲激情网站免费观看| aaa亚洲精品| 亚洲日本电影在线| 色综合久久综合中文综合网| 综合色中文字幕| 91丨porny丨国产入口| 亚洲欧美在线视频观看| k8久久久一区二区三区| 亚洲日穴在线视频| 欧美在线综合视频| 欧美sm极限捆绑bd| 国产一区二区三区久久久| 欧美色综合影院| 国产精品久久久久婷婷| 久久精品久久久精品美女| 日本精品视频一区二区| 中文字幕一区二区三区乱码在线 | 国产九色精品成人porny | 国产iv一区二区三区| 中文幕一区二区三区久久蜜桃| 成人av在线影院| 亚洲精选视频免费看| 在线不卡免费欧美| 国产一区二三区| 中文字幕一区二区三区av| 在线一区二区观看| 蜜桃一区二区三区四区| 久久综合九色综合欧美就去吻| 国产成人小视频| 亚洲最大成人网4388xx| 成人禁用看黄a在线| 亚洲一二三四区不卡| 日韩欧美久久一区| 99久久综合国产精品| 性欧美疯狂xxxxbbbb| 久久先锋影音av| 色天天综合久久久久综合片| 日韩av电影免费观看高清完整版| 久久这里只有精品首页| 日本高清不卡一区| 国产乱人伦偷精品视频不卡| 亚洲一区二区三区影院| 久久久精品国产免大香伊| 欧美日韩一区二区三区在线看| 国产精品一区二区三区网站| 亚洲国产精品久久一线不卡| 久久婷婷国产综合精品青草| 欧美午夜片在线观看| 高清av一区二区| 欧美国产日本视频| 91精品婷婷国产综合久久竹菊| av在线不卡观看免费观看| 久久91精品国产91久久小草| 亚洲精品乱码久久久久久 | 国产精品白丝在线| 日韩亚洲欧美一区二区三区| 91视频com| 日韩在线观看一区二区| 中文字幕亚洲在| 久久久久久9999| 欧美一区二区三区白人| 日本高清不卡视频| 国产99精品视频| 久久成人18免费观看| 日韩影院免费视频| 一区二区三区欧美久久| 国产精品久久久久婷婷| 国产日韩精品一区| 久久婷婷一区二区三区| 26uuu久久天堂性欧美| 日韩精品一区二区三区视频| 欧美精品自拍偷拍| 欧美精品一卡两卡| 欧美色手机在线观看| 国产精品1区二区.| 亚洲一级片在线观看|