1. 程式人生 > 程式設計 >php橋接模式的例項用法及程式碼分析

php橋接模式的例項用法及程式碼分析

說明

1、將兩個原本不相關的類結合在一起,然後利用兩個類中的方法和屬性,輸出一份新的結果。

2、結構分為Abstraction抽象類、RefindAbstraction被提煉的抽象類、Implementor實現類、ConcreteImplementor具體實現類 、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
http://www.cppcns.com
*/ 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>'; } } // 客戶端程式碼 // 白色圓形 $whitehttp://www.cppcns.com
Roundhttp://www.cppcns.com = new Round(new White()); $whiteRound->operation(); // 黑色正方形 $blackSquare = new Square(new Black()); $blackSquare->operation(); // 紅色長方形 $redRectangle = new Rectangle(new Red()); $redRectangle->operation();

執行結果

白色圓形
黑色正方形
紅色長方形

內容擴充套件:

橋接模式

橋連模式:將抽象部分與實現部分分離,使它們都可以獨立的變化。它是一種結構性模式,又稱柄體(Handle and body)模式或者介面(Interface)模式。 當一個抽象可能有多個實現時,通常用繼承來協調他們。抽象類的定義對該抽象的介面。而具體的子類則用不同的方式加以實現,但是此方法有時不夠靈活。繼承機制將抽象部分與他的視線部分固定在一起,使得難以對抽象部分和實現部分獨立地進行修改、擴充和充用。

理解橋接模式,重點需要理解如何將抽象化(Abstraction)與實現化(Implementation)脫耦,使得二者可以獨立地變化。

•抽象化:抽象化就是忽略一些資訊,把不同的實體當作同樣的實體對待。在面向物件中,將物件的共同性質抽取出來形成類的過程即為抽象化的過程。

•實現化:針對抽象化給出的具體實現,就是實現化,抽象化與實現化是一對互逆的概念,實現化產生的物件比抽象化更具體,是對抽象化事物的進一步具體化的產物。

•脫耦:脫耦就是將抽象化和實現化之間的耦合解脫開,或者說是將它們之間的強關聯改換成弱關聯,將兩個角色之間的繼承關系改為關聯關係。橋接模式中的所謂脫耦,就是指在一個軟體系統的抽象化和實現化之間使用關聯關係(組合或者聚合關係)而不是繼承關係,從而使兩者可以相對獨立地變化,這就是橋接模式的用意。

適用性

1). 你不希望在抽象和他的實現部分之間有一個固定的邦定關係,如在程式的執行時刻實現部分應該可以被選擇或者切換。

2). 類的抽象以及他的視像都可以通過生成子類的方法加以擴充。這時bridge模式使你可以對不同的抽象介面

和實現部分進行組合,並對他們進行擴充。

3). 對一個抽象的實現部分的修改應該對客戶不產生影響,即客戶的程式碼不需要重新編譯。

4). 你想對客戶完全隱藏抽象的實現部分。

5). 你想在多個實現間 共享實現,但同時要求客戶並不知道這一點。

到此這篇關於橋接模式的例項用法及程式碼分析的文章就介紹到這了,更多相關php橋接模式是什麼內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!