设计模式(结构型设计模式——桥接模式)

设计模式(结构型设计模式------桥接模式)

桥接模式

基本定义

桥接模式将继承关系转化成关联关系,它降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量。

降低了类与类之间的耦合度:脱耦就是将抽象化和实现化之间的耦合解脱开,或者说是将它们之间的强关联改换成弱关联,将两个角色之间的继承关系改为关联关系。

模式结构

Abstraction:抽象类(最终需要的对象的类)。

RefinedAbstraction:扩充抽象类(产品/对象)。

Implementor:实现类接口(服务于我们的抽象类,作为抽象类的一个属性或者是维度)。

ConcreteImplementor:具体实现类 。

代码实现

Implementor:实现类接口

实现类接口,用于服务于抽象类(Car), 为抽象类提供必要的属性或维度

java 复制代码
public interface Color {
   void addColor(String carType);
}
ConcreteImplementor: 具体实现类
java 复制代码
@Slf4j
public class Black implements Color{
    public void addColor(String carType) {
        log.info("汽车类型:{}, 喷漆颜色:黑色", carType);
    }
}
java 复制代码
@Slf4j
public class White implements Color {
    public void addColor(String carType) {
        log.info("汽车类型:{}, 喷漆颜色:白色", carType);
    }
}
Abstraction: 抽象类

桥接模式最终目的就是为了建立一个抽象类的对象

java 复制代码
public abstract class Car {
    /**
     * 关联关系,抽象类使用接口实现类通过关联关系进行的,这也是桥接模式的一个重要的特点
     * 关联关系的重要性:
     *      1.关联关系是弱关联(降低耦合度),例如需要增加汽车颜色,只需实现color接口即可,不影响现有代码
     *      2.使用color属性时, 没有通过继承或者实现方式,这是桥接模式特点之一
     *      相比于适配器模式,关联关系的桥接模式更容易达到抽象对象结构建立的目的,而适配器模式通过继承和实现的方式,达到接口兼容的目的
     */
    public Color color;
    public void setColor(Color color) {
        this.color = color;
    }
    public abstract void makeCar(String carType);
 }
RefinedAbstraction: 扩充抽象类

扩充抽象类,遵从面向接口编程

java 复制代码
public class CarImpl extends Car {
    public void makeCar(String carType) {
        color.addColor(carType);
    }
}
测试类
java 复制代码
public class Test {
    public static void main(String[] args){
        Car car = new CarImpl();
        Color color = new Black();
        car.setColor(color);
        car.makeCar("AUDI");//print: 汽车类型:AUDI, 喷漆颜色:黑色
    }
}

优点

  1. 分离抽象接口及其实现部分。提高了比继承更好的解决方案。

  2. 桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。

  3. 实现细节对客户透明,可以对用户隐藏实现细节。

缺点

  1. 桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

  2. 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围有一定的局限性。

使用场景

  1. 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
  2. 对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。
  3. 一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

总结

  1. 桥接模式实现了抽象化与实现化的脱耦。他们两个互相独立,不会影响到对方。

  2. 对于两个独立变化的维度,使用桥接模式再适合不过了。

  3. "具体的抽象类"(我们将抽象类的属性交给具体的实现类去处理)所做的改变,是不会影响到客户的。

相关推荐
Daniel 大东4 分钟前
idea 解决缓存损坏问题
java·缓存·intellij-idea
wind瑞11 分钟前
IntelliJ IDEA插件开发-代码补全插件入门开发
java·ide·intellij-idea
HappyAcmen11 分钟前
IDEA部署AI代写插件
java·人工智能·intellij-idea
马剑威(威哥爱编程)16 分钟前
读写锁分离设计模式详解
java·设计模式·java-ee
鸽鸽程序猿17 分钟前
【算法】【优选算法】前缀和(上)
java·算法·前缀和
修道-032318 分钟前
【JAVA】二、设计模式之策略模式
java·设计模式·策略模式
九圣残炎23 分钟前
【从零开始的LeetCode-算法】2559. 统计范围内的元音字符串数
java·算法·leetcode
当归102436 分钟前
若依项目-结构解读
java
hlsd#1 小时前
关于 SpringBoot 时间处理的总结
java·spring boot·后端
iiiiiankor1 小时前
C/C++内存管理 | new的机制 | 重载自己的operator new
java·c语言·c++