国产三级农村妇女在线,国产精品毛片a∨一区二区三区,国产乱子伦视频大全,国产精品色拉拉,国产欧美日韩一区二区三区,

首頁(yè) > 技術(shù) > IOS開(kāi)發(fā)

php橋接模式的實(shí)例用法及代碼分析

IOS開(kāi)發(fā) 2023-02-16 22:19:43

說(shuō)明

1、將兩個(gè)原本不相關(guān)的類(lèi)結(jié)合在一起,然后利用兩個(gè)類(lèi)中的方法和屬性,輸出一份新的結(jié)果。

2、結(jié)構(gòu)分為Abstraction抽象類(lèi)、RefindAbstraction被提煉的抽象類(lèi)、Implementor實(shí)現(xiàn)類(lèi)、ConcreteImplementor具體實(shí)現(xiàn)類(lèi) 、Client客戶(hù)端代碼。

實(shí)例

/**
 * 顏色抽象類(lèi)
 * 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 '紅色';
    }
}
 
 
/**
 * 形狀抽象類(lèi)
 * 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() . '圓形
'; } } /** * 長(zhǎng)方形 * Class Rectangle */ class Rectangle extends Shape { /** * @return mixed|void */ public function operation() { // TODO: Implement operation() method. echo $this->colour->run() . '長(zhǎng)方形
'; } } /** * 正方形 * Class Square */ class Square extends Shape { /** * @return mixed|void */ public function operation() { // TODO: Implement operation() method. echo $this->colour->run() . '正方形
'; } } // 客戶(hù)端代碼 // 白色圓形 $whiteRound = new Round(new White()); $whiteRound->operation(); // 黑色正方形 $blackSquare = new Square(new Black()); $blackSquare->operation(); // 紅色長(zhǎng)方形 $redRectangle = new Rectangle(new Red()); $redRectangle->operation();

運(yùn)行結(jié)果

白色圓形
黑色正方形
紅色長(zhǎng)方形

內(nèi)容擴(kuò)展:

橋接模式

橋連模式:將抽象部分與實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立的變化。它是一種結(jié)構(gòu)性模式,又稱(chēng)柄體(Handle and body)模式或者接口(Interface)模式。 當(dāng)一個(gè)抽象可能有多個(gè)實(shí)現(xiàn)時(shí),通常用繼承來(lái)協(xié)調(diào)他們。抽象類(lèi)的定義對(duì)該抽象的接口。而具體的子類(lèi)則用不同的方式加以實(shí)現(xiàn),但是此方法有時(shí)不夠靈活。繼承機(jī)制將抽象部分與他的視線部分固定在一起,使得難以對(duì)抽象部分和實(shí)現(xiàn)部分獨(dú)立地進(jìn)行修改、擴(kuò)充和充用。

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

•抽象化:抽象化就是忽略一些信息,把不同的實(shí)體當(dāng)作同樣的實(shí)體對(duì)待。在面向?qū)ο笾校瑢?duì)象的共同性質(zhì)抽取出來(lái)形成類(lèi)的過(guò)程即為抽象化的過(guò)程。

•實(shí)現(xiàn)化:針對(duì)抽象化給出的具體實(shí)現(xiàn),就是實(shí)現(xiàn)化,抽象化與實(shí)現(xiàn)化是一對(duì)互逆的概念,實(shí)現(xiàn)化產(chǎn)生的對(duì)象比抽象化更具體,是對(duì)抽象化事物的進(jìn)一步具體化的產(chǎn)物。

•脫耦:脫耦就是將抽象化和實(shí)現(xiàn)化之間的耦合解脫開(kāi),或者說(shuō)是將它們之間的強(qiáng)關(guān)聯(lián)改換成弱關(guān)聯(lián),將兩個(gè)角色之間的繼承關(guān)系改為關(guān)聯(lián)關(guān)系。橋接模式中的所謂脫耦,就是指在一個(gè)軟件系統(tǒng)的抽象化和實(shí)現(xiàn)化之間使用關(guān)聯(lián)關(guān)系(組合或者聚合關(guān)系)而不是繼承關(guān)系,從而使兩者可以相對(duì)獨(dú)立地變化,這就是橋接模式的用意。

適用性

1). 你不希望在抽象和他的實(shí)現(xiàn)部分之間有一個(gè)固定的邦定關(guān)系,如在程序的運(yùn)行時(shí)刻實(shí)現(xiàn)部分應(yīng)該可以被選擇或者切換。

2). 類(lèi)的抽象以及他的視像都可以通過(guò)生成子類(lèi)的方法加以擴(kuò)充。這時(shí)bridge模式使你可以對(duì)不同的抽象接口

和實(shí)現(xiàn)部分進(jìn)行組合,并對(duì)他們進(jìn)行擴(kuò)充。

3). 對(duì)一個(gè)抽象的實(shí)現(xiàn)部分的修改應(yīng)該對(duì)客戶(hù)不產(chǎn)生影響,即客戶(hù)的代碼不需要重新編譯。

4). 你想對(duì)客戶(hù)完全隱藏抽象的實(shí)現(xiàn)部分。

5). 你想在多個(gè)實(shí)現(xiàn)間 共享實(shí)現(xiàn),但同時(shí)要求客戶(hù)并不知道這一點(diǎn)。

到此這篇關(guān)于php橋接模式的實(shí)例用法及代碼分析的文章就介紹到這了,更多相關(guān)php橋接模式是什么內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

TAg

加載中~

本網(wǎng)站LOGO受版權(quán)及商標(biāo)保護(hù),版權(quán)登記號(hào):國(guó)作登字-2022-F-10126915,未經(jīng)湖南木星科技官方許可,嚴(yán)禁使用。
Copyright ? 2012-2022 湖南木星科技有限公司(木星網(wǎng))版權(quán)所有
轉(zhuǎn)載內(nèi)容版權(quán)歸作者及來(lái)源網(wǎng)站所有,本站原創(chuàng)內(nèi)容轉(zhuǎn)載請(qǐng)注明來(lái)源,商業(yè)媒體及紙媒請(qǐng)先聯(lián)系:aishangyiwan@126.com

工信部備案號(hào):湘ICP備19012813號(hào)-5