站長資訊網
        最全最豐富的資訊網站

        PHP 設計模式之適配器模式 | PHP 技術論壇

        PHP 設計模式之適配器模式 | PHP 技術論壇

        PHP設計模式之適配器模式

        1. 生活場景問題引入:

        假如需要去國外旅游,游玩,現在電子產品很豐富,但是每個電子產品都是需要電源來做驅動,手機,電腦,相機。。。但是又有一個很顯示的問題,電子產品是
        很消耗電量的,電量沒有了,就需要充電,在我們國家,我們買的電子產品出場帶的電源充電器,一般都是220V的電壓,但是世界很大,每個國家的要求(規定)
        又是不同的,比如美國就是120V

        1. 原理:

        將一個類的接口轉換為另外一種接口,讓原本接口不兼容的類可以兼容。

        用戶調用適配器轉化出來的目標接口方法,適配器再去調用被適配者的相關接口方法

        1. 好處:

        用戶是看不到被適配者,屬于解耦的操作

        1. 適配器模式屬于結構型的設計模式

        2. 適配器模式的三種實現方式:

        一、 類適配器

        PHP 設計模式之適配器模式 | PHP 技術論壇

        根據上面的UML圖,我們可以看出,需要一個美國電壓的接口UsaInterface,一個適配器類Adapter,一個中國電壓的接口Chine,一個使用者Computer
        在這里,中國電壓就是被適配者,美國電壓是最后的輸出(目標),就是是配置者

        interface UsaInterface{     public function outPut5V();}class China{     private $voltage = 220;      public function outPut220V()     {         return $this->voltage;     }}class Adapter extends China implements UsaInterface{      public function outPut5V()     {         // TODO: Implement outPut5V() method.         $chinaVoltage = $this->outPut220V();          return $chinaVoltage / 2 + 10 . "V";     }}class Computer{     public function index(UsaInterface $usa)     {         if ($usa->outPut5V() === "120V") {             printf("可以在美國使用中國的電源插頭給電腦充電了");         } else {             printf("不可以在美國使用中國的電源插頭給電腦充電了");         }     }}class Client{     public function __construct()     {         $adapter = new Adapter();         $computer = new Computer();          $computer->index($adapter);     }}

        二、對象適配器模式

        對象適配器其實就是在類適配器的模式上做了一個調整,讓適配器類Adapter不去繼承被適配者的類,而是讓它們組合在一起,這樣就可以增加了使用的靈活
        度,也不會暴露被適配者的很多方法(使用關聯關系來代替繼承關系【合成復用原則】)。同時,沒有繼承就沒有辦法去覆蓋父類的方法重寫了,也算是有好有壞吧。如下:

        class Adapter implements UsaInterface{     protected $china;      public function __construct(China $china)     {         $this->china = $china;     }       public function outPut5V()     {         // TODO: Implement outPut5V() method.         $chinaVoltage = $this->china->outPut220V();          return $chinaVoltage / 2 + 10 . "V";     }}

        三、接口適配器(缺省適配器模式)

        當不需要全部實現接口提供的方法時,可以先設計一個抽象類實現接口,并為接口提供默認的的空方法實現,那么改抽象類的子方法就可以有選擇的覆蓋父類的某
        些方法來實現需求,(適用于一個接口不想使用所有的方法的情況)

        相關學習推薦:PHP編程從入門到精通

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 欧美日韩精品久久久免费观看| 亚洲人成电影网站国产精品| 久久久久国产精品嫩草影院 | 久久久国产乱子伦精品作者| 亚洲精品午夜无码电影网| 99精品国产成人一区二区| 亚洲精品无码Av人在线观看国产 | 久久精品夜色噜噜亚洲A∨| 欧美日韩在线精品一区二区三区激情综合 | 四虎成人精品国产永久免费无码| 亚洲精品一级无码中文字幕| 亚洲AV无码成人网站久久精品大| 成人午夜视频精品一区| 国产成人精品免费大全| 亚欧无码精品无码有性视频| 精品亚洲成a人片在线观看| 国产成人精品一区在线| 亚洲精品午夜无码电影网| 久久精品国产免费一区| 亚洲国产主播精品极品网红 | 2022国内精品免费福利视频| 国产高清在线精品一本大道| 亚洲一日韩欧美中文字幕欧美日韩在线精品一区二 | 亚洲AV无码精品色午夜果冻不卡| 97久久超碰国产精品旧版| 91精品国产自产在线观看| 性欧洲精品videos| 久久99精品久久久久久9蜜桃| 91精品国产福利在线导航| 欧美人与性动交α欧美精品| 91精品国产福利在线导航| 亚洲精品无码激情AV| 欧美性videofree精品| 久久夜色精品国产噜噜亚洲AV| 久久91这里精品国产2020| 欧美精品国产一区二区| 久久棈精品久久久久久噜噜| 欧美亚洲成人精品| 国产精品99久久久久久宅男| 久久99精品国产自在现线小黄鸭| 中文精品久久久久人妻不卡|