學習php設計模式 php實現(xiàn)適配器模式
一、意圖
將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原來由于接口不兼容而不能一起工作的那此類可以一起工作
二、適配器模式結構圖


三、適配器模式中主要角色
目標(Target)角色:定義客戶端使用的與特定領域相關的接口,這也就是我們所期待得到的
源(Adaptee)角色:需要進行適配的接口
適配器(Adapter)角色:對Adaptee的接口與Target接口進行適配;適配器是本模式的核心,適配器把源接口轉換成目標接口,此角色為具體類
四、適配器模式適用場景
1、你想使用一個已經(jīng)存在的類,而它的接口不符合你的需求
2、你想創(chuàng)建一個可以復用的類,該類可以與其他不相關的類或不可預見的類協(xié)同工作
3、你想使用一個已經(jīng)存在的子類,但是不可能對每一個都進行子類化以匹配它們的接口。對象適配器可以適配它的父類接口(僅限于對象適配器)
五、類適配器模式與對象適配器
類適配器:Adapter與Adaptee是繼承關系
1、用一個具體的Adapter類和Target進行匹配。結果是當我們想要一個匹配一個類以及所有它的子類時,類Adapter將不能勝任工作
2、使得Adapter可以重定義Adaptee的部分行為,因為Adapter是Adaptee的一個子集
3、僅僅引入一個對象,并不需要額外的指針以間接取得adaptee
對象適配器:Adapter與Adaptee是委托關系
1、允許一個Adapter與多個Adaptee同時工作。Adapter也可以一次給所有的Adaptee添加功能
2、使用重定義Adaptee的行為比較困難
適配器模式與其它模式
橋梁模式(bridge模式):橋梁模式與對象適配器類似,但是橋梁模式的出發(fā)點不同:橋梁模式目的是將接口部分和實現(xiàn)部分分離,從而對它們可以較為容易也相對獨立的加以改變。而對象適配器模式則意味著改變一個已有對象的接口
裝飾器模式(decorator模式):裝飾模式增強了其他對象的功能而同時又不改變它的接口。因此裝飾模式對應用的透明性比適配器更好。
六、類適配器模式PHP示例
類適配器使用的是繼承
<?php
/**
* 目標角色
*/
interface Target {
/**
* 源類也有的方法1
*/
public function sampleMethod1();
/**
* 源類沒有的方法2
*/
public function sampleMethod2();
}
/**
* 源角色
*/
class Adaptee {
/**
* 源類含有的方法
*/
public function sampleMethod1() {
echo 'Adaptee sampleMethod1 <br />';
}
}
/**
* 類適配器角色
*/
class Adapter extends Adaptee implements Target {
/**
* 源類中沒有sampleMethod2方法,在此補充
*/
public function sampleMethod2() {
echo 'Adapter sampleMethod2 <br />';
}
}
class Client {
/**
* Main program.
*/
public static function main() {
$adapter = new Adapter();
$adapter->sampleMethod1();
$adapter->sampleMethod2();
}
}
Client::main();
?>
七、對象適配器模式PHP示例
對象適配器使用的是委派
<?php
/**
* 目標角色
*/
interface Target {
/**
* 源類也有的方法1
*/
public function sampleMethod1();
/**
* 源類沒有的方法2
*/
public function sampleMethod2();
}
/**
* 源角色
*/
class Adaptee {
/**
* 源類含有的方法
*/
public function sampleMethod1() {
echo 'Adaptee sampleMethod1 <br />';
}
}
/**
* 類適配器角色
*/
class Adapter implements Target {
private $_adaptee;
public function __construct(Adaptee $adaptee) {
$this->_adaptee = $adaptee;
}
/**
* 委派調用Adaptee的sampleMethod1方法
*/
public function sampleMethod1() {
$this->_adaptee->sampleMethod1();
}
/**
* 源類中沒有sampleMethod2方法,在此補充
*/
public function sampleMethod2() {
echo 'Adapter sampleMethod2 <br />';
}
}
class Client {
/**
* Main program.
*/
public static function main() {
$adaptee = new Adaptee();
$adapter = new Adapter($adaptee);
$adapter->sampleMethod1();
$adapter->sampleMethod2();
}
}
Client::main();
?>
以上就是使用php實現(xiàn)適配器模式的代碼,還有一些關于適配器模式的概念區(qū)分,希望對大家的學習有所幫助。
- PHP設計模式之適配器模式(Adapter)原理與用法詳解
- php設計模式 Adapter(適配器模式)
- PHP設計模式之適配器模式代碼實例
- PHP設計模式之適配器模式原理與用法分析
- php設計模式之適配器模式原理、用法及注意事項詳解
- PHP設計模式之適配器模式定義與用法詳解
- php設計模式之適配器模式實例分析【星際爭霸游戲案例】
- PHP設計模式(四)原型模式Prototype實例詳解【創(chuàng)建型】
- PHP設計模式(三)建造者模式Builder實例詳解【創(chuàng)建型】
- PHP設計模式(一)工廠模式Factory實例詳解【創(chuàng)建型】
- PHP設計模式概論【概念、分類、原則等】
- PHP設計模式(五)適配器模式Adapter實例詳解【結構型】
相關文章
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安裝配置方法
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安裝配置方法...2007-05-05
PHP imagecreatefrombmp 從BMP文件或URL新建一圖像
大家都知道php GD庫可方便的從URL新建一圖像, GD中有imagecreatefromjpeg(),imagecreatefromPNG()....等2012-07-07

