php高級程序設(shè)計(jì)_模式,框架與測試模式:如何應(yīng)對“多維度的變化”(圖)微信小程序 php框架
2022-08-29
橋接模式:在一個(gè)軟件系統(tǒng)中,有的類型由于自身的邏輯而發(fā)生了二維或多個(gè)維度的變化,那么如何應(yīng)對這種“多維變化”呢?這就是使用橋接模式的地方 - 將抽象與其實(shí)現(xiàn)分開php高級程序設(shè)計(jì)_模式,框架與測試,以便它們可以獨(dú)立更改。
UML類圖:
人物介紹:
() 作用:抽象給定定義并持有對實(shí)現(xiàn)對象的引用。
修改()角色:擴(kuò)展抽象角色php高級程序設(shè)計(jì)_模式,框架與測試,改變和修改父類對的定義。
() 角色:該角色給出了實(shí)現(xiàn)角色的接口,但不給出具體的實(shí)現(xiàn)。需要指出的是網(wǎng)站模板,這個(gè)接口不一定和抽象角色的接口定義一樣,其實(shí)兩個(gè)接口可以有很大的不同。
具體實(shí)現(xiàn)(Bus)角色:該角色給出實(shí)現(xiàn)角色接口的具體實(shí)現(xiàn)。
代碼反映:
icar->Run(); echo :在高速公路上。; } } /**鄉(xiāng)村街道 * Class Street */ class Street extends AbstractRoad { function Run() { $this->icar->Run(); echo :在鄉(xiāng)村街道上。; } } /**抽象汽車接口 * Interface ICar */ interface ICar { function Run(); } /**吉普車 * Class Jeep */ class Jeep implements ICar { function Run() { echo 吉普車跑; } } /**小汽車 * Class Car */ class Car implements ICar { function Run() { echo 小汽車跑; } }
測試代碼:
/------------------------橋接模式測試代碼------------------ require_once ./Bridge/Bridge.php; $speedRoad=new SpeedRoad(); $speedRoad->icar=new Car(); $speedRoad->Run(); echo
; $=新();$->icar=new Jeep(); $->運(yùn)行();
適用場景:
1. 如果系統(tǒng)需要在組件的抽象角色和具體角色之間增加更多靈活性,請避免在兩個(gè)級別之間創(chuàng)建靜態(tài)鏈接。
2. 設(shè)計(jì)要求對實(shí)現(xiàn)角色的任何更改都不應(yīng)影響客戶端網(wǎng)站建設(shè),或者對實(shí)現(xiàn)角色的更改對客戶端是完全透明的。
3.一個(gè)組件有多個(gè)抽象角色和實(shí)現(xiàn)角色,系統(tǒng)需要它們之間的動(dòng)態(tài)耦合。
4. 雖然在系統(tǒng)中使用繼承沒有問題,但由于抽象角色和具體角色需要獨(dú)立更改,因此設(shè)計(jì)要求兩者都獨(dú)立管理。