结合JDK,Spring,Mybatis,Netty,Tomcat,Dubbo等经典框架的源码对设计模式展开分析(八)

本文深入探讨桥接模式,解释其定义、目的和应用场景。通过一个简化示例说明如何用桥接模式替代继承以提高灵活性。文章还分析了JDBC中桥接模式的运用,例如DriverManager如何分发操作给各个数据库驱动,以此展示该模式如何支持系统扩展和灵活性,同时提到了其可能带来的理解与设计挑战。
摘要由CSDN通过智能技术生成
  • 桥接模式(Bridge Pattern)

定义:指将抽象部分与具体实现部分分离,使他们都可以独立地变化

主要目的是通过组合的方式建立两个类之间的联系,而不是继承

应用场景:在抽象和具体实现之间需要增加更多灵活性的场景,一个类存在多个独立变化的维度时,常见的使用场景就是替换继承,因为使用继承时,常会出现父类代码对子类代码进行入侵,所以设计模式中,有一个原则就是优先使用组合/聚合,而不是继承

简化理解例子:假如有一个抽象产品类,这个产品拥有两种随时可能进行拓展的属性或行为,以至于假如当你初始设计时考虑的并不全面,在扩展一个属性的可能时,由于还有另一个属性存在,在组合两种属性时,会产生乘积数量级的实现,也就是说单个属性的变动,会产生乘积数量级的子类,这种方式太不灵活,代码的复用性也低,所以我们应该把这两种属性拆分开来,成为两个不同的抽象,然后采用组合的方式,拼装成为需要的产品

桥接模式的通用写法:

package com.BridgePattern;

/**
 * @author yangxiaozhen
 * @date 2022/5/16-20:32
 */
//一个层次
public class Computer {
    private Brand brand;

    //两个层次
    public interface Brand {
        void operationOfBrand();
    }


    private Computer(Brand brand) {
        this.brand = brand;
    }

    protected void operationOfComputer() {
        brand.operationOfBrand();
    }

    static class dell implements Brand {

        @Override
        public void operationOfBrand() {
            System.out.println("dell品牌的行为");
        }
    }

    static class apple implements Brand {

        @Override
        public void operationOfBrand() {
            System.out.println("apple品牌的行为");
        }
    }

    static class laptop extends Computer {
        public laptop(Brand brand) {
            super(brand);
        }

        @Override
        protected void operationOfComputer() {
            super.operationOfComputer();
            System.out.println("笔记本电脑的行为");
        }
    }

    static class desktop extends Computer {
        public desktop(Brand brand) {
            super(brand);
        }

        @Override
        protected void operationOfComputer() {
            super.operationOfComputer();
            System.out.println("台式电脑的行为");
        }
    }

    public static void main(String[] args) {
        Computer desktop = new desktop(new dell());
        desktop.operationOfComputer();
    }
}

桥接模式在JDK源码中的应用:JDBC中的Driver类和drivermanager类

JDBC的api中定义了操作方式,具体的实现由Driver的各各数据库厂商的实现类去具体实现差异性的过程,通过DriverManager(class.forName将驱动装载到内存中,并执行驱动的静态代码块,静态代码块本质上,把驱动对象装载到DriverManager中,最终getConnection()调用到驱动中具体实现的connect()方法创建连接对象)将客户端对数据库的操作分发给具体的Drvier,这样,客户端,可以随意的组织调用逻辑和扩展,而不会影响Driver的具体实现和扩展

优点:提高了系统的扩展性和灵活性,符合开闭原则,符合合成复用原则

缺点:增加了系统的理解难度和设计难度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值