桥接模式来啦

桥接模式可通过组合的方式,将抽象和实现的部分连接起来。就实现方式来说,桥接模式和适配器模式有相似之处,但是二者应用的阶段不同。桥接模式应用于设计阶段,适配器模式应用于代码重构阶段。

理解桥接模式,其实就是理解代码抽象和解耦

一、举个

神话故事女娲造人大家都知道吧。来重温一遍,

据说,有一天,大神女娲行走在这片莽莽榛榛的原野上,看看周围的景象,感到非常孤独。她觉得在这天地之间,应该添一点什么东西进去,让它生气蓬勃起来才好。

添一点什么东西进去呢?

走啊走啊,她走得有些疲倦了,偶然在一个池子旁边蹲下来。澄澈的池水照见了她的面容和身影;她笑,池水里的影子也向着她笑;她假装生气,池水里的影子也向着她生气。她忽然灵机一动:“虽然,世间各种各样的生物都有了,可单单没有像自己一样的生物,那为什么不创造一种像自己一样的生物加入到世间呢?”

想着,她就顺手从池边掘起一团黄泥,掺和了水,在手里揉团着,揉团着,揉团成了第一个娃娃模样的小东西。

女娲看着她亲手创造的这个聪明美丽的生物,又听见“妈妈”的喊声,不由得满心欢喜,眉开眼笑。

她给她心爱的孩子取了一个名字,叫做“人”。

她一心要让这些美丽可爱的小生物布满大地。但是,大地毕竟太大了,她工作了许久,还没有达到她的意愿,而她本人已经疲倦不堪了。

最后,她想出了一个绝妙的创造人类的方法。她从崖壁上拉下一条枯藤,伸入一个泥潭里,搅成了浑黄的泥浆,向地面这么一挥洒,泥点溅落的地方,就出现了许多小小的叫着跳着的人儿,和先前用黄泥捏成的小人儿,模样一般无二。“妈妈”“妈妈”的喊声,震响在周围。

用这种方法来进行工作,果然简单省事。藤条一挥,就有好些活人出现,不久,大地上就布满了人类的踪迹。

在这个故事中,女娲大神创造人类用了斡旋造化的天罡神通、枯藤、息壤(黄泥)合在一起创造了人。

二、代码解析

接下里用代码层面解析一下

天道法则接口

//天道法则接口
public interface LawHeaven {

    //法则的使用
    void heavenUse();

}

斡旋造化神通(需要遵循天道法则的规范)

//斡旋造化
public class WoxuanZaohua implements LawHeaven{


    @Override
    public void heavenUse() {
        System.out.println("使用造化法则发动斡旋造化神通,化死为生");
    }
}

使用神通的载体

//神通载体
public abstract class UseCarrier {

    // 神通
    protected LawHeaven lawHeaven;

    //使用神通的基础物质(不必须)
    protected T xiran;

    //以构造器模式注入神通和基础物质
    public  UseCarrier(LawHeaven lawHeaven ,T xiran){
        this.lawHeaven = lawHeaven;
        this.xiran = xiran;
    }

    //触发神通
   abstract String touchMagicalPower();

}

神通载体实现类 :手

public class Hand extends UseCarrier{


    public Hand(LawHeaven lawHeaven, String xiran) {
        super(lawHeaven, xiran);
    }

    @Override
    String touchMagicalPower() {
        System.out.println("基础神物获得 : " + xiran);
        lawHeaven.heavenUse();
        return "得到一个人";
    }
}

神通载体实现类 :枯藤

public class WitheredVine extends UseCarrier>{

    public WitheredVine(LawHeaven lawHeaven, List xiran) {
        super(lawHeaven, xiran);
    }

    @Override
    String touchMagicalPower() {
        for (String s : xiran) {
            System.out.println("基础神物获得 : " + s);
            lawHeaven.heavenUse();
        }
        return "得到" + xiran.size() + "个人";
    }
}

调用方 : 女娲大神

public class NvWa {

    public static void main(String[] args) {
        WoxuanZaohua woxuanZaohua = new WoxuanZaohua();
        System.out.println("------------手捏---------");
        System.out.println(new Hand(woxuanZaohua, "息壤").touchMagicalPower());
        System.out.println("------------枯藤甩----------");
        System.out.println(new WitheredVine(woxuanZaohua, Arrays.asList("息壤", "息壤", "息壤", "息壤", "息壤")).touchMagicalPower());
    }

}

三、总结

看图

桥接模式本质上是两类不同对象的组合并完成同一个动作,其中把握好变化点(抽象类/接口)和变化点(抽象类/接口)的组合即可。例如斡旋造化神通是属于天道法则的变化点(因为天罡三十六神通都是参悟天道法则而成),手、枯藤也是属于神通载体的变化点(载体也可以是其他东西,例如树杈),然后对变化的进行组合和变化点的行为组合

对了,你是女娲大神手捏的还是枯藤甩的

你可能感兴趣的:(设计模式,桥接模式)