关于设计模式:设计模式7-探索一下桥接模式

51次阅读

共计 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 源码解析JDBCMybatisSpringredis 分布式 剑指 OfferLeetCode等,认真写好每一篇文章,不喜爱题目党,不喜爱花里胡哨,大多写系列文章,不能保障我写的都完全正确,然而我保障所写的均通过实际或者查找材料。脱漏或者谬误之处,还望斧正。

剑指 Offer 全副题解 PDF

开源编程笔记

正文完
 0