適配器模式許多和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ì)象適配器)
- //目標(biāo)角色
- interface Target {
- public function simpleMethod1();
- public function simpleMethod2();
- }
- //源角色
- class Adaptee {
- public function simpleMethod1(){
- echo 'Adapter simpleMethod1'."<br>";
- }
- }
- //類適配器角色
- class Adapter implements Target {
- private $adaptee;
- function __construct(Adaptee $adaptee) {
- $this->adaptee = $adaptee;
- }
- //委派調(diào)用Adaptee的sampleMethod1方法
- public function simpleMethod1(){
- echo $this->adaptee->simpleMethod1();
- }
- public function simpleMethod2(){
- echo 'Adapter simpleMethod2'."<br>";
- }
- }
- //客戶端
- class Client {
- public static function main() {
- $adaptee = new Adaptee();
- $adapter = new Adapter($adaptee);
- $adapter->simpleMethod1();
- $adapter->simpleMethod2();
- } //Vevb.com
- }
- Client::main();
【運(yùn)行結(jié)果】
Adapter simpleMethod1
Adapter simpleMethod2
例子2:生活中最常見(jiàn)到的足球換人機(jī)制:
- <?php
- /**
- * Created by PhpStorm.
- */
- //-------------抽象接口---------------
- /**抽象運(yùn)動(dòng)員
- * Interface IPlayer
- */
- interface SoccerPlayer
- {
- function Attack();
- function Defense();
- }
- /**前鋒
- * Class Forward
- */
- class Forward implements SoccerPlayer
- {
- function Attack()
- {
- echo "前鋒攻擊<br/>";
- }
- function Defense()
- {
- echo "前鋒防御<br/>";
- }
- }
- /**中鋒
- * Class Center
- */
- class Center implements SoccerPlayer
- {
- function Attack()
- {
- echo "中鋒攻擊<br/>";
- }
- function Defense()
- {
- echo "中鋒防御<br/>";
- }
- }
- //--------------待適配對(duì)象-----------
- /**梅西 剛進(jìn)入罷賽的運(yùn)動(dòng)員
- * Class Yaoming
- */
- class Messi
- {
- function 進(jìn)攻()
- {
- echo "梅西進(jìn)攻<br/>";
- }
- function 防御()
- {
- echo "梅西防御<br/>";
- }
- }
- //------------適配器--------------
- /**適配器
- * Class Adapter
- */
- class Adapter implements SoccerPlayer
- {
- private $_player;
- //Vevb.com
- function __construct()
- {
- $this->_player=new Messi();
- }
- function Attack()
- {
- $this->_player->進(jìn)攻();
- }
- function Defense()
- {
- $this->_player->防御();
- }
- }
- //測(cè)試如下:
- $player1=new Forward();
- echo "前鋒上場(chǎng):<br/>";
- $player1->Attack();
- $player1->Defense();
- echo "<hr/><br/>";
- echo "梅西上場(chǎng):<br/>";
- $Messi=new Adapter();
- $Messi->Attack();
- $Messi->Defense();
|
新聞熱點(diǎn)
疑難解答