FSA全栈行动 FSA全栈行动
首页
  • 移动端文章

    • Android
    • iOS
    • Flutter
  • 学习笔记

    • 《Kotlin快速入门进阶》笔记
    • 《Flutter从入门到实战》笔记
    • 《Flutter复习》笔记
前端
后端
  • 学习笔记

    • 《深入浅出设计模式Java版》笔记
  • 逆向
  • 分类
  • 标签
  • 归档
  • LinXunFeng
  • GitLqr

公众号:FSA全栈行动

记录学习过程中的知识
首页
  • 移动端文章

    • Android
    • iOS
    • Flutter
  • 学习笔记

    • 《Kotlin快速入门进阶》笔记
    • 《Flutter从入门到实战》笔记
    • 《Flutter复习》笔记
前端
后端
  • 学习笔记

    • 《深入浅出设计模式Java版》笔记
  • 逆向
  • 分类
  • 标签
  • 归档
  • LinXunFeng
  • GitLqr
  • DesignPattern - 设计原则与设计模式初探
  • DesignPattern - 单例模式【创建型】
  • DesignPattern - 工厂模式【创建型】
  • DesignPattern - 原型模式【创建型】
  • DesignPattern - 建造者模式【创建型】
  • DesignPattern - 适配器模式【结构型】
  • DesignPattern - 桥接模式【结构型】
    • 一、桥接模式介绍
    • 二、桥接模式代码实现
      • 1、举例说明
      • 2、代码实现
  • DesignPattern - 组合模式【结构型】
  • DesignPattern - 装饰器模式【结构型】
  • DesignPattern - 代理模式【结构型】
  • DesignPattern - 外观模式【结构型】
  • DesignPattern - 享元模式【结构型】
  • DesignPattern - 策略模式【行为型】
  • DesignPattern - 模板方法模式【行为型】
  • DesignPattern - 观察者模式【行为型】
  • DesignPattern - 责任链模式【行为型】
  • DesignPattern - 命令模式【行为型】
  • DesignPattern - 迭代器模式【行为型】
  • DesignPattern - 备忘录模式【行为型】
  • DesignPattern - 状态模式【行为型】
  • 《深入浅出设计模式Java版》
FullStackAction
2021-08-09
目录

DesignPattern - 桥接模式【结构型】

欢迎关注微信公众号:[FSA全栈行动 👋]

# 一、桥接模式介绍

桥接模式是一种结构型模式,将抽象部分与实现部分分离,使它们都可以独立的变化,通俗来说,是通过组合来桥接其它的行为/维度。

  • 应用场景
    • 系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性
    • 不想使用因继承导致系统类的个数急剧增加的系统
    • 有时候一个类,可能会拥有多个变化维度,比如啤酒,有不同的容量和品牌,可以使用继承组合的方式进行开发,假如维度很多,就容易出现类的膨胀,使用桥接模式就可以解决这个问题,且解耦
  • 优点
    • 抽象和实现的分离
    • 优秀的扩展能力,符合开闭原则
  • 缺点
    • 增加系统的理解与设计难度
    • 使用聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程,比如抽象类手机,里面聚合了颜色类

补充:桥接模式用于设计的前期,精细化的设计,让系统更加灵活

# 二、桥接模式代码实现

# 1、举例说明

在编码之前,先举个例子,手机有很规格,比如品牌、内存、机身颜色等等,那么在设计数据库表的时候,绝对不可能在 phone 表中用字段直接描述以上规格,就比如机身颜色来说,除了有常见的红绿蓝等颜色,还有类似 “亮黑”、“晴雪”、“墨羽” 等自定义的颜色,并且后期还可能重命名,可想而知,在 Phone 表中用一个字段来描述颜色维护性是有多差,更别说内存了(内存还分品牌、容量、带宽...),这时把就得考虑把颜色单独放一张 Color 表,两表之间通过 外键关联,以后不管是增加或重命名颜色,都很灵活。

表与表之间通过 外键关联(一般是 Int 类型) 就是一种桥接模式,那么在实际编码中,一般是通过 组合 的方式实现这种桥接关系,即在 Phone 类中持有 Color 对象。另外,因为对象除了可以描述属性,还可以有行为方法,所以说,桥接模式可以桥接其它的行为/维度。

# 2、代码实现

创建 颜色接口,以及 具体颜色类:

/**
 * 颜色接口
 *
 * @author GitLqr
 */
public interface IColor {
	String getColor();
}

public class BlueColor implements IColor {
	@Override
	public String getColor() {
		return "蓝色";
	}
}

public class RedColor implements IColor {
	@Override
	public String getColor() {
		return "红色";
	}
}

创建抽象角色手机类,持有 Color 对象:

/**
 * 抽象角色:手机
 *
 * @author GitLqr
 */
public abstract class Phone {

	/**
	 * 通过组合的方式来桥接其他行为
	 */
	protected IColor color;

	public void setColor(IColor color) {
		this.color = color;
	}

	/**
	 * 手机的方法
	 */
	public abstract void run();
}

创建具体角色手机类:

/**
 * 手机实例:小米手机
 *
 * @author GitLqr
 */
public class MiPhone extends Phone {

	public MiPhone(IColor color) {
		this.setColor(color);
	}

	@Override
	public void run() {
		System.out.println(color.getColor() + "小米手机运行中...");
	}
}

/**
 * 手机实例:苹果手机
 *
 * @author GitLqr
 */
public class IPhone extends Phone {

	public IPhone(IColor color) {
		this.setColor(color);
	}

	@Override
	public void run() {
		System.out.println(color.getColor() + "苹果手机运行中...");
	}
}

使用:

public static void main(String[] args) {
    Phone miPhone = new MiPhone(new BlueColor());
    miPhone.run(); // 蓝色小米手机运行中...

    Phone iPhone = new IPhone(new RedColor());
    iPhone.run(); // 红色苹果手机运行中...
}
#设计模式#桥接模式
DesignPattern - 适配器模式【结构型】
DesignPattern - 组合模式【结构型】

← DesignPattern - 适配器模式【结构型】 DesignPattern - 组合模式【结构型】→

最近更新
01
Flutter - Xcode16 还原编译速度
04-05
02
AI - 免费的 Cursor 平替方案
03-30
03
Android - 2025年安卓真的闭源了吗
03-28
更多文章>
Theme by Vdoing | Copyright © 2020-2025 FSA全栈行动
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×