1. 程式人生 > >“戲”說設計模式——橋接模式

“戲”說設計模式——橋接模式

首先請出今天的主人公——“絲綢之路的開拓者”張騫

 

張騫富有開拓和冒險精神,建元二年(前139年),奉漢武帝之命,由甘父做嚮導,率領一百多人出使西域,打通了漢朝通往西域的南北道路,即赫赫有名的絲綢之路,漢武帝以軍功封其為博望侯。史學家司馬遷稱讚張騫出使西域為“鑿空”,意思是“開通大道”。 [2-3] 

張騫被譽為偉大的外交家、探險家,是“絲綢之路的開拓者”、“第一個睜開眼睛看世界的中國人”、“東方的哥倫布” [4-7]  。他將中原文明傳播至西域,又從西域諸國引進了汗血馬、葡萄、苜蓿、石榴、胡麻等物種到中原,促進了東西方文明的交流。

 

 是絲綢之路是一條重要的貿易之路,是一座中外交流往來的“橋樑”

在絲綢之路上,各國商人通過不斷地交易往來,拉近了中外合作的友好往來,我們我們看看他們都通過“絲綢之路”這座橋樑交易了什麼?

我們都知道中國古代時,缺少作戰勇猛的汗血寶馬和耐用的棉織品,中國的達官貴族喜愛的鑽石。而這些物品都通過阿拉伯商人獲取

public interface ArabBusinessman {//阿拉伯商人
    //絲綢之路,和中國商人交易獲得中國特產商品
    public void imported();//出口阿拉伯特有物品
}

汗血寶馬、棉花、鑽石都實現阿拉伯商人的出口介面。

public class Horse implements ArabBusinessman {
    @Override
    public void imported() {
        System.out.println("獲得【馬】");
    }
}

public class Cotton implements ArabBusinessman {
    @Override
    public void imported() {
        System.out.println("獲得【棉花】");
    }
}

public class Diamonds implements ArabBusinessman {
    @Override
    public void imported() {
        System.out.println("獲得【鑽石】");
    }
}

勇敢的開拓者——中國商人 

public abstract class ChineseBusinessman {

    protected ArabBusinessman arabBusinessman;//引用,和阿拉伯商人交易

    public ChineseBusinessman(ArabBusinessman arabBusinessman) {
        this.arabBusinessman = arabBusinessman;
    }

    public abstract void trade();//抽象方法
}

在第三行中引入了阿拉伯商人,在這裡宣告為protected目的在於讓中國商人的商品能只有中國商人擁有,商品子類繼承了中國商人類,第五行是“橋樑” ,trade()方法用來實現交易的中國商品。

 我們再來看看中國商人的出售的商品:茶葉絲綢

public class Tea extends ChineseBusinessman {
    public Tea(ArabBusinessman arabBusinessman) {
        super(arabBusinessman);
    }
    @Override
    public void trade() {
        System.out.print("用【茶葉】交易");
        arabBusinessman.imported();
    }
}

public class Silk extends ChineseBusinessman {
    public Silk(ArabBusinessman arabBusinessman) {
        super(arabBusinessman);
    }
    @Override
    public void trade() {
        System.out.print("用【絲綢】交易");
        arabBusinessman.imported();
    }
}

我們在第4行的構造子中呼叫了抽象中國商人類的構造子注入傳入的商品類,建立“橋樑”的連線。

交易地點為著名的:絲綢之路

public class The_Silk_Road {
    public static void main(String[] args) {
        //使用茶葉交易
        new Tea(new Horse()).trade();
        new Tea(new Cotton()).trade();
        new Tea(new Diamonds()).trade();
        //使用絲綢交易
        new Silk(new Horse()).trade();
        new Silk(new Cotton()).trade();
        new Silk(new Diamonds()).trade();
    }
}

交易結果

我們觀察結果發現這有點像離散數學中的笛卡爾積

 

設A,B為集合,用A中元素為第一元素,B中元素為第二元素構成有序對,所有這樣的有序對組成的集合叫做A與B的笛卡爾積,記作AxB.

笛卡爾積的符號化為:

A×B={(x,y)|x∈A∧y∈B}

例如,A={a,b}, B={0,1,2},則

A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}

B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}

 橋接模式而言,它巧妙運用了抽象類(抽象商品類)引入介面(阿拉伯商品介面),

這樣我們不但能能修改中國商品,還能替換交易的阿拉伯商品,這就是對抽象、實現的雙邊解耦、分離、脫鉤。

橋接模式主要應用於一個系統需要在構件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個層次之間建立靜態的繼承聯絡,通過橋接模式可以使它們在抽象層建立一個關聯關係。另一種是對於那些不希望使用繼承或因為多層次繼承導致系統類的個數急劇增加的系統,橋接模式尤為適用。

碼字不易,加個關注吧!謝謝觀看