“戏”说设计模式——桥接模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wfy2695766757/article/details/85637080

首先请出今天的主人公——“丝绸之路的开拓者”张骞

张骞富有开拓和冒险精神,建元二年(前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)}

 桥接模式而言,它巧妙运用了抽象类(抽象商品类)引入接口(阿拉伯商品接口),

这样我们不但能能修改中国商品,还能替换交易的阿拉伯商品,这就是对抽象、实现的双边解耦、分离、脱钩。

桥接模式主要应用于一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。另一种是对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。

码字不易,加个关注吧!谢谢观看

猜你喜欢

转载自blog.csdn.net/wfy2695766757/article/details/85637080