共计 2444 个字符,预计需要花费 7 分钟才能阅读完成。
设计模式,写代码必备神器 …
桥接模式是什么?
桥接模式 是把抽象化和实现化解耦,让两者能够独立,该设计模式属于结构性设计模式。何为将抽象化和实现化解耦,能够了解为将性能点形象进去,性能的实现如何取决于不同的需要,然而形象的性能点(接口)曾经 被桥接 到本来的类型上,只用关注与实现。本来的类型变动,和形象的性能点能够自在变动,两头的桥梁曾经搭建起来了。
桥接模式其实就是不单单应用类继承的形式,而是重点应用类聚合的形式,进行桥接,把形象的性能点,聚合(注入)到基类外面。
桥接模式的益处
个别用于解决什么问题呢?
次要是性能点实现品种多,多个维度的性能点,独立变动 ,没有什么关联,能够依照维度来治理。比方有 2 个维度,每个维度有 3 种实现,然而不同的维度之间其实没有关联,如果依照维度之间两两关联来搞,单单是实现类的数量就曾经2 * 3 = 6
个类了,是在不太适合,还耦合在一块。
用电脑举个例子,既会分成不同的品牌,比方戴尔,联想,又会分为台式机,笔记本,那么不同的类就会很多,性能可能比拟反复。正是鉴于这一点,咱们得剥离反复的性能,用桥接的形式,来保护形象进去的独特性能点。
如果再新增一个品牌,比方,华硕,那么又得减少两个类,这显著不太适合,不同的类很多性能可能会反复。
那么桥接模式怎么解决呢?桥接模式把两个不同的维度 台式机 和 笔记本 抽取进去,相当于作为一个通用的属性来保护。
代码 Demo 演示
首先,定义一个形象的电脑类AbstractComputer
, 在其中有一个属性是ComputerType
, 示意电脑的类型:
public abstract class AbstractComputer {
protected ComputerType type;
public void setType(ComputerType type) {this.type = type;}
public abstract void work();}
再定义三种类型的电脑:LenovoComputer
,AsusComputer
,DellComputer
:
public class LenovoComputer extends AbstractComputer{
@Override
public void work() {System.out.print("联想");
type.feature();}
}
public class AsusComputer extends AbstractComputer{
@Override
public void work() {System.out.print("华硕");
type.feature();}
}
public class DellComputer extends AbstractComputer{
@Override
public void work() {System.out.print("戴尔");
type.feature();}
}
电脑类型这个维度同样须要一个抽象类ComputerType
, 外面有一个阐明性能的办法feature()
:
public abstract class ComputerType {
// 性能个性
public abstract void feature();}
电脑类型这个维度,咱们定义台式机和笔记本电脑两种:
public class DesktopComputerType extends ComputerType{
@Override
public void feature() {System.out.println("台式机:性能弱小,拓展性强");
}
}
public class LaptopComputerType extends ComputerType{
@Override
public void feature() {System.out.println("笔记本电脑:玲珑便携,办公不在话下");
}
}
测试一下,咱们须要不同的搭配的时候,只须要将一个维度 set
到对象中去即可,就能够聚合出不同品牌不同类型的电脑:
public class BridgeTest {public static void main(String[] args) {ComputerType desktop = new DesktopComputerType();
LenovoComputer lenovoComputer = new LenovoComputer();
lenovoComputer.setType(desktop);
lenovoComputer.work();
ComputerType laptop = new LaptopComputerType();
DellComputer dellComputer = new DellComputer();
dellComputer.setType(laptop);
dellComputer.work();}
}
测试后果:
联想 台式机:性能弱小,拓展性强
戴尔 笔记本电脑:玲珑便携,办公不在话下
总结一下
桥接模式,实质上就是将不同维度或者说性能,形象进去,作为属性,聚合到对象外面,而不是通过继承。这样肯定水平上缩小了类的数量,然而如果不同的维度之间,变动是相关联的,这样应用起来还须要再做各种非凡判断,应用起来容易造成凌乱,不宜应用。(重点:用组合 / 聚合关系代替继承关系来实现)
JDBC
,搞过 Java
的同学应该都晓得,这是一种 Java
对立拜访数据库的 API
,能够操作Mysql
,Oracle
等,次要用到的设计模式也是桥接模式, 有趣味能够理解一下 Driver
驱动类治理的源码。
【作者简介】:
秦怀,公众号【秦怀杂货店 】作者,技术之路不在一时,山高水长,纵使迟缓,驰而不息。集体写作方向:Java 源码解析
,JDBC
,Mybatis
,Spring
,redis
, 分布式
, 剑指 Offer
,LeetCode
等,认真写好每一篇文章,不喜爱题目党,不喜爱花里胡哨,大多写系列文章,不能保障我写的都完全正确,然而我保障所写的均通过实际或者查找材料。脱漏或者谬误之处,还望斧正。
剑指 Offer 全副题解 PDF
开源编程笔记