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

目录

    • 一、简介
    • 二、桥接模式
      • 2.1、手机品牌接口
      • 2.2、手机功能接口
      • 2.3、抽象部分
      • 2.4、具体抽象部分
      • 2.5、使用
    • 三、优点和缺点

一、简介

   桥接模式(Bridge Pattern) 是一种结构型设计模式,用于将抽象部分与它的实现部分分离,使它们可以独立地变化。桥接模式的核心思想是将一个大类或一系列紧密相关的类拆分成两个独立的层次结构:抽象部分(Abstraction)和实现部分(Implementation),使它们能够独立地进行变化。

  在桥接模式中,抽象部分定义了客户端使用的高层接口,而实现部分则是实现这些接口的具体实现类。抽象部分和实现部分各自通过接口进行通信,而不是通过继承的方式,这样就可以在运行时动态地将抽象部分和实现部分组合起来。

  通过桥接模式,可以更容易地对系统进行扩展和维护,因为抽象部分和实现部分可以独立地变化,而且它们的变化不会相互影响。总的来说,桥接模式主要用于解耦抽象部分和实现部分,以提高代码的灵活性、可扩展性和可维护性。以下是桥接模式的几个关键角色:

  • 抽象(Abstraction) :定义抽象接口,通常包含对实现接口的引用。
  • 扩展抽象(Refined Abstraction) :对抽象的扩展,可以是抽象类的子类或具体实现类。
  • 实现(Implementor) :定义实现接口,提供基本操作的接口。
  • 具体实现(Concrete Implementor) :实现实现接口的具体类。

二、桥接模式

2.1、手机品牌接口

  定义一个品牌的接口,这里有两个品牌的实现类,苹果和华为。

// 实现部分:手机品牌接口
public interface Brand {
    String info();
}

// 具体实现部分:苹果品牌
public class Apple implements Brand {
    public String info() {
        return "苹果";
    }
}

// 具体实现部分:华为品牌
public class Huawei implements Brand {
    public String info() {
        return "华为";
    }
}

2.2、手机功能接口

  定义一个手机的功能的接口,同时有两个功能实现如照相和打游戏。

// 具体实现部分:手机功能接口
public interface PhoneFunction {
    String feature();
}

// 具体实现部分:拍照功能
public class Camera implements PhoneFunction {
    public String feature() {
        return "照相";
    }
}

// 具体实现部分:游戏功能
public class Gaming implements PhoneFunction {
    public String feature() {
        return "打游戏";
    }
}

2.3、抽象部分

  定义抽象部分,它包括对品牌接口和功能接口的引用。

// 抽象部分:手机抽象类
public abstract class Phone {
    protected Brand brand;
    protected PhoneFunction function;

    public Phone(Brand brand, PhoneFunction function) {
        this.brand = brand;
        this.function = function;
    }

    abstract String showInfo();
}

2.4、具体抽象部分

  对抽象部分的实现

// 具体抽象部分:具体手机类
public class ConcretePhone extends Phone {
    public ConcretePhone(Brand brand, PhoneFunction function) {
        super(brand, function);
    }

    public String showInfo() {
        return brand.info() + function.feature();
    }
}

2.5、使用

public class BridgePatternDemo {
    public static void main(String[] args) {
        // 组装不同品牌的手机和不同功能
        System.out.println(new ConcretePhone(new Apple(), new Camera()).showInfo());
        System.out.println(new ConcretePhone(new Apple(), new Gaming()).showInfo());
        System.out.println(new ConcretePhone(new Huawei(), new Camera()).showInfo());
        System.out.println(new ConcretePhone(new Huawei(), new Gaming()).showInfo());
    }
}

运行结果:

苹果照相
苹果打游戏
华为照相
华为打游戏

  这个例子中,手机品牌和手机功能被解耦合,使得我们可以轻松地组合不同的品牌和功能,而不需要修改具体手机类。这展示了桥接模式的核心思想:将抽象部分与实现部分分离,使得它们可以独立地变化和扩展。

三、优点和缺点

  桥接模式的优点和缺点如下:

优点:

  • 解耦合: 桥接模式可以将抽象部分和实现部分分离,使它们可以独立变化,降低它们之间的耦合性。
  • 扩展性: 桥接模式可以方便地扩展和增加新的抽象部分和实现部分,而不会相互影响,系统更加灵活。
  • 可维护性: 分离抽象和实现部分使得代码更加清晰、易于理解和维护。
  • 隐藏实现细节: 客户端仅与抽象部分进行交互,隐藏了实现的细节,使得系统更加简洁、易于使用。

缺点:

  • 增加复杂性: 桥接模式需要对系统进行额外的抽象,可能增加系统的复杂性,特别是在具有多层次抽象的情况下。
  • 设计较难: 桥接模式需要设计抽象部分和实现部分之间的接口和关联关系,需要一定的设计能力和经验。
  • 可能导致过多的类: 如果应用桥接模式过度,系统中可能会产生大量的类,增加系统的管理和维护难度。

  总体来说,桥接模式可以提高系统的灵活性和可扩展性,使得抽象部分和实现部分可以独立地变化和扩展,但需要在设计时权衡好系统的复杂性和可维护性。

你可能感兴趣的:(设计模式,设计模式,桥接模式)