PHP設計模式之適配器模式

來源:互聯網
上載者:User
適配器模式屬於結構型模式

概述:將一個類的介面轉換成客戶希望的另外一個介面。Adapter 模式使得原本的由於介面不相容而不能一起工作的那些類可以一起工作

使用前提:

適配器中主要角色

目標(Target)角色:定義用戶端使用的與特定領域相關的介面,這也就是我們所希望得到的

源(Adaptee)角色:需要進行適配的介面

適配器(Adapter)角色:対Adaptee的介面與Target的介面進行適配;適配器是本模式的核心,適配器把源介面轉換成目標介面,此角色為具體類

適配器使用情境

1、你想使用一個已經存在的類,而它的介面不符合你的需求

2、你想建立一個可以複用的類,該類可以與其他不相關的類或不可預見的類協同工作

3、你想使用一個已經存在的子類,但是不可能對每一個都進行子類化以匹配他們的介面,對象適配器可以適配他的父類介面(僅限於對象適配器)

個人舉例:

1 姚明在NBA打球,但是不懂英語,需要一個翻譯進行翻譯之後才能懂得戰術

2 蘋果手機使用安卓手機的充電線

namespace haibao\design\web\view\design;

use haibao\design\web\common\design\adapter\Forwards;

use haibao\design\web\common\design\adapter\Center;

use haibao\design\web\common\design\adapter\Translator;

class Adapter extends \haibao\design\web\view\Base{

protected function preRender(){

header("Content-type: text/html; charset=utf-8");

$forwards = new Forwards('科比');

$forwards->attack();

$forwards->defense();

echo "

";

$center = new Center('霍華德');

$center->attack();

$center->defense();

echo "

";

$translator = new Translator('姚明');

$translator->attack();

$translator->defense();

echo "

";

}

}

/**

* 中鋒

*/

namespace haibao\design\web\common\design\adapter;

class Center extends Player{

public function __construct($name){

parent::__construct($name);

}

public function attack(){

echo '中鋒'.$this->name.'進攻
';

}

public function defense(){

echo '中鋒'.$this->name.'防守
';

}

}

/**

* 外籍前鋒

*/

namespace haibao\design\web\common\design\adapter;

class ForeignCenter{

private $name;

public function __construct($name){

$this->name = $name;

}

public function chinaattack(){

echo '外籍前鋒'.$this->name.'進攻
';

}

public function chinadefense(){

echo '外籍前鋒'.$this->name.'防守
';

}

}

/**

* 前鋒

*/

namespace haibao\design\web\common\design\adapter;

class Forwards extends Player{

public function __construct($name){

parent::__construct($name);

}

public function attack(){

echo '前鋒'.$this->name.'進攻
';

}

public function defense(){

echo '前鋒'.$this->name.'防守
';

}

}

/**

* 球員

*/

namespace haibao\design\web\common\design\adapter;

abstract class Player{

public $name;

public function __construct($name){

$this->name = $name;

}

public function attack(){

}

public function defense(){

}

}

/**

* 外籍中鋒翻譯員

*/

namespace haibao\design\web\common\design\adapter;

class Translator extends Player{

public $foreignCenter;

public function __construct($name){

$this->foreignCenter = new ForeignCenter($name);

}

public function attack(){

$this->foreignCenter->chinaattack();

}

public function defense(){

$this->foreignCenter->chinadefense();

}

}

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.