设计模式,写代码必备神器...
桥接模式是什么?
桥接模式是把抽象化和实现化解耦,让两者能够独立,该设计模式属于结构性设计模式。何为将抽象化和实现化解耦,能够了解为将性能点形象进去,性能的实现如何取决于不同的需要,然而形象的性能点(接口)曾经被桥接到本来的类型上,只用关注与实现。本来的类型变动,和形象的性能点能够自在变动,两头的桥梁曾经搭建起来了。
桥接模式其实就是不单单应用类继承的形式,而是重点应用类聚合的形式,进行桥接,把形象的性能点,聚合(注入)到基类外面。
桥接模式的益处
个别用于解决什么问题呢?
次要是性能点实现品种多,多个维度的性能点,独立变动,没有什么关联,能够依照维度来治理。比方有 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
开源编程笔记