桥接模式可通过组合的方式,将抽象和实现的部分连接起来。就实现方式来说,桥接模式和适配器模式有相似之处,但是二者应用的阶段不同。桥接模式应用于设计阶段,适配器模式应用于代码重构阶段。
理解桥接模式,其实就是理解代码抽象和解耦
一、举个🌰
神话故事女娲造人大家都知道吧。来重温一遍,
据说,有一天,大神女娲行走在这片莽莽榛榛的原野上,看看周围的景象,感到非常孤独。她觉得在这天地之间,应该添一点什么东西进去,让它生气蓬勃起来才好。
添一点什么东西进去呢?
走啊走啊,她走得有些疲倦了,偶然在一个池子旁边蹲下来。澄澈的池水照见了她的面容和身影;她笑,池水里的影子也向着她笑;她假装生气,池水里的影子也向着她生气。她忽然灵机一动:“虽然,世间各种各样的生物都有了,可单单没有像自己一样的生物,那为什么不创造一种像自己一样的生物加入到世间呢?”
想着,她就顺手从池边掘起一团黄泥,掺和了水,在手里揉团着,揉团着,揉团成了第一个娃娃模样的小东西。
女娲看着她亲手创造的这个聪明美丽的生物,又听见“妈妈”的喊声,不由得满心欢喜,眉开眼笑。
她给她心爱的孩子取了一个名字,叫做“人”。
她一心要让这些美丽可爱的小生物布满大地。但是,大地毕竟太大了,她工作了许久,还没有达到她的意愿,而她本人已经疲倦不堪了。
最后,她想出了一个绝妙的创造人类的方法。她从崖壁上拉下一条枯藤,伸入一个泥潭里,搅成了浑黄的泥浆,向地面这么一挥洒,泥点溅落的地方,就出现了许多小小的叫着跳着的人儿,和先前用黄泥捏成的小人儿,模样一般无二。“妈妈”“妈妈”的喊声,震响在周围。
用这种方法来进行工作,果然简单省事。藤条一挥,就有好些活人出现,不久,大地上就布满了人类的踪迹。
在这个故事中,女娲大神创造人类用了斡旋造化的天罡神通、枯藤、息壤(黄泥)合在一起创造了人。
二、代码解析
接下里用代码层面解析一下
天道法则接口
//天道法则接口
public interface LawHeaven {
//法则的使用
void heavenUse();
}
斡旋造化神通(需要遵循天道法则的规范😏)
//斡旋造化
public class WoxuanZaohua implements LawHeaven{
@Override
public void heavenUse() {
System.out.println("使用造化法则发动斡旋造化神通,化死为生");
}
}
使用神通的载体
//神通载体
public abstract class UseCarrier<T> {
// 神通
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<String>{
public Hand(LawHeaven lawHeaven, String xiran) {
super(lawHeaven, xiran);
}
@Override
String touchMagicalPower() {
System.out.println("基础神物获得 : " + xiran);
lawHeaven.heavenUse();
return "得到一个人";
}
}
神通载体实现类 :枯藤
public class WitheredVine extends UseCarrier<List<String>>{
public WitheredVine(LawHeaven lawHeaven, List<String> 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());
}
}
三、总结
看图
桥接模式本质上是两类不同对象的组合并完成同一个动作,其中把握好变化点(抽象类/接口)和变化点(抽象类/接口)的组合即可。例如斡旋造化神通是属于天道法则的变化点(因为天罡三十六神通都是参悟天道法则而成),手、枯藤也是属于神通载体的变化点(载体也可以是其他东西,例如树杈),然后对变化的进行组合和变化点的行为组合
对了,你是女娲大神手捏的还是枯藤甩的👀