?這篇文章給大家分享的是PHP橋接模式的用法。對大家學些和理解PHP設(shè)計模式有一定的幫助,文中示例代碼介紹的非常詳細,感興趣的朋友接下來一起跟隨小編看看吧。
????說明
????1、將兩個原本不相關(guān)的類結(jié)合在一起,然后利用兩個類中的方法和屬性,輸出一份新的結(jié)果。
????2、結(jié)構(gòu)分為Abstraction抽象類、RefindAbstraction被提煉的抽象類、Implementor實現(xiàn)類、ConcreteImplementor具體實現(xiàn)類 、Client客戶端代碼。
????實例
/** * 顏色抽象類 * Class Colour */ abstract class Colour { /** * @return mixed */ abstract public function run(); } /** * 黑色 * Class Black */ class Black extends Colour { public function run() { // TODO: Implement run() method. return '黑色'; } } /** * 白色 * Class White */ class White extends Colour { public function run() { // TODO: Implement run() method. return '白色'; } } /** * 紅色 * Class Red */ class Red extends Colour { public function run() { // TODO: Implement run() method. return '紅色'; } } /** * 形狀抽象類 * Class Shape */ abstract class Shape { /** * 顏色 * @var Colour */ protected $colour; /** * Shape constructor. * @param Colour $colour */ public function __construct(Colour $colour) { $this->colour = $colour; } /** * @return mixed */ abstract public function operation(); } /** * 圓形 * Class Round */ class Round extends Shape { /** * @return mixed|void */ public function operation() { // TODO: Implement operation() method. echo $this->colour->run() . '圓形<br>'; } } /** * 長方形 * Class Rectangle */ class Rectangle extends Shape { /** * @return mixed|void */ public function operation() { // TODO: Implement operation() method. echo $this->colour->run() . '長方形<br>'; } } /** * 正方形 * Class Square */ class Square extends Shape { /** * @return mixed|void */ public function operation() { // TODO: Implement operation() method. echo $this->colour->run() . '正方形<br>'; } } // 客戶端代碼 // 白色圓形 $whiteRound = new Round(new White()); $whiteRound->operation(); // 黑色正方形 $blackSquare = new Square(new Black()); $blackSquare->operation(); // 紅色長方形 $redRectangle = new Rectangle(new Red()); $redRectangle->operation();
????運行結(jié)果
白色圓形
黑色正方形
紅色長方形
????內(nèi)容擴展:
????橋接模式
????橋連模式:將抽象部分與實現(xiàn)部分分離,使它們都可以獨立的變化。它是一種結(jié)構(gòu)性模式,又稱柄體(Handle and body)模式或者接口(Interface)模式。 當一個抽象可能有多個實現(xiàn)時,通常用繼承來協(xié)調(diào)他們。抽象類的定義對該抽象的接口。而具體的子類則用不同的方式加以實現(xiàn),但是此方法有時不夠靈活。繼承機制將抽象部分與他的視線部分固定在一起,使得難以對抽象部分和實現(xiàn)部分獨立地進行修改、擴充和充用。
????理解橋接模式,重點需要理解如何將抽象化(Abstraction)與實現(xiàn)化(Implementation)脫耦,使得二者可以獨立地變化。
?????抽象化:抽象化就是忽略一些信息,把不同的實體當作同樣的實體對待。在面向?qū)ο笾?,將對象的共同性質(zhì)抽取出來形成類的過程即為抽象化的過程。
?????實現(xiàn)化:針對抽象化給出的具體實現(xiàn),就是實現(xiàn)化,抽象化與實現(xiàn)化是一對互逆的概念,實現(xiàn)化產(chǎn)生的對象比抽象化更具體,是對抽象化事物的進一步具體化的產(chǎn)物。
?????脫耦:脫耦就是將抽象化和實現(xiàn)化之間的耦合解脫開,或者說是將它們之間的強關(guān)聯(lián)改換成弱關(guān)聯(lián),將兩個角色之間的繼承關(guān)系改為關(guān)聯(lián)關(guān)系。橋接模式中的所謂脫耦,就是指在一個軟件系統(tǒng)的抽象化和實現(xiàn)化之間使用關(guān)聯(lián)關(guān)系(組合或者聚合關(guān)系)而不是繼承關(guān)系,從而使兩者可以相對獨立地變化,這就是橋接模式的用意。
????適用性
????1). 你不希望在抽象和他的實現(xiàn)部分之間有一個固定的邦定關(guān)系,如在程序的運行時刻實現(xiàn)部分應(yīng)該可以被選擇或者切換。
????2). 類的抽象以及他的視像都可以通過生成子類的方法加以擴充。這時bridge模式使你可以對不同的抽象接口和實現(xiàn)部分進行組合,并對他們進行擴充。
????3). 對一個抽象的實現(xiàn)部分的修改應(yīng)該對客戶不產(chǎn)生影響,即客戶的代碼不需要重新編譯。
????4). 你想對客戶完全隱藏抽象的實現(xiàn)部分。
????5). 你想在多個實現(xiàn)間 共享實現(xiàn),但同時要求客戶并不知道這一點。