设计模式(6):桥接模式

一.桥接模式核心要点

  • 处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关系。 \color{red}{处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关系。} 处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关系。

二.桥接模式实际开发中应用的场景

  • JDBC驱动程序
  • OA系统中的消息处理:
    • 业务消息:普通消息、加急消息、特急消息
    • 发送消息方式:系统内消息、手机短信、邮件
  • 银行日志管理
    • 格式分类: 操作日志、交易日志、异常日志
    • 距离分类:本地记录日志、异地记录日志

三.桥接模式举例讲解

1.业务:

  • 商城系统中常见的商品分类,以电脑为例,电脑类型分为台式电脑、平板电脑、笔记本电脑,电脑品牌分为华硕、戴尔、联想等等,具体类型可能是'华硕台式电脑',这个业务存在两个维度变化,那么如何良好的处理商品分类销售的问题?

2.不使用桥接模式:

  • 我们可以使用多继承结构实现,这个时候存在两个维度变化,就会形成笛卡尔积。
    • 类个数膨胀问题:
      • 如果要增加一个新的电脑类型,则要增加各个品牌下面的类;
      • 如果要增加一个品牌,也要增加各种电脑类型的类。
    • 违法单一职责原则:
      • 一个类,联想笔记本,有两个引起这个类变化的因素,违法单一职责原则

3.桥接模式实现:

    (1)电脑类型接口与实现类型

java 复制代码
 /**
    * 电脑类型
    */
   public interface Computer {
		String getTypeName();
	}
	public class Laptop implements Computer{
		@Override
		public String getTypeName() {
			return "笔记本电脑";
		}
	}
	public class Desktop implements Computer{
		@Override
		public String getTypeName() {
			return "台式电脑";
		}
	}
	/**
	 * 可以随意添加,不会影响其他类
	 */
	/*public class Aad implements Computer{
		@Override
		public String getTypeName() {
			return "平板电脑";
		}
	}*/

    (2)电脑品牌抽象类与实现类

java 复制代码
 /**
  * 品牌
  */
 public abstract class Brand {
	Computer computer;
	
	public Brand(Computer computer) {
		this.computer = computer;
	}
	
	public abstract String getBrand();
	
	public void operation() {
		System.out.println(getBrand()+computer.getTypeName());
	}
}
/**
 * 华硕电脑
 */
public class ASUS extends Brand{
	public ASUS(Computer computer) {
		super(computer);
	}
	@Override
	public String getBrand() {
		return "华硕";
	}
}
/**
 * 戴尔电脑
 */
public class Dell extends Brand{
	public Dell(Computer computer) {
		super(computer);
	}
	@Override
	public String getBrand() {
		return "戴尔";
	}
}
/**
 * 联想电脑
 */
public class Lenovo extends Brand{
	public Lenovo(Computer computer) {
		super(computer);
	}
	@Override
	public String getBrand() {
		return "联想";
	}
}

/**
 * 可以随意添加,不会影响其他类
 */
/*public class Shenzhou extends Brand{
	public Shenzhou(Computer computer) {
		super(computer);
	}
	@Override
	public String getBrand() {
		return "神州";
	}
}*/

    (3)桥接模式调用

java 复制代码
/**
 * 桥接模式:可以取代多层继承的方案!
 *
 */
public class App {
	public static void main(String[] args) {
		Brand c = new Dell(new Desktop());
		c.operation();
	}
}

四.桥接模式总结:

  • 桥接模式可以取代多层继承关系。多层继承关系违背了单一职责原则,复用性较差,类的个数也非常多。桥接模式可以极大的减少子类的个数,从而降低管理和维护的成本。 \color{red}{桥接模式可以取代多层继承关系。多层继承关系违背了单一职责原则,复用性较差,类的个数也非常多。桥接模式可以极大的减少子类的个数,从而降低管理和维护的成本。} 桥接模式可以取代多层继承关系。多层继承关系违背了单一职责原则,复用性较差,类的个数也非常多。桥接模式可以极大的减少子类的个数,从而降低管理和维护的成本。
  • 桥接模式极大的提高了系统可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有的系统,符合开闭原则。 \color{red}{桥接模式极大的提高了系统可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有的系统,符合开闭原则。} 桥接模式极大的提高了系统可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有的系统,符合开闭原则。

更多设计模式学习:

设计模式(1):介绍

设计模式(2):单例模式

设计模式(3):工厂模式

设计模式(4):建造者模式

设计模式(5):原型模式

设计模式(7):装饰器模式

设计模式持续更新中...

相关推荐
geovindu19 小时前
java: Backtracking Algorithm
java·开发语言·windows·后端·算法·回溯算法
NWU_LK19 小时前
【WebFlux】第六篇 —— 全链路响应式与数据库交互
java·数据库
一只小菜鸡..19 小时前
南京大学 操作系统 (JYY) 学习笔记:Hello, OS World! (程序的机器视角)
java·笔记·学习
萧青山19 小时前
2026国标合规:Agent Loop合规设计模式的6种循环架构(GB/Z 185.6+Python)
python·设计模式·agent loop·gb/z 185·国标合规
叶总没有会19 小时前
3.2 构建AI智能体项目扩展知识
java·数据库·人工智能·spring·ai
Lakers-2419 小时前
1987年6月10日晚上23-24点出生性格、运势和命运
java
唐青枫20 小时前
Java Jetty 实战详解:从嵌入式 HTTP 服务到 Spring Boot 容器替换
java
腻害兔1 天前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社1 天前
AES加密原理详解及Java实现加解密实战
java·开发语言
萧瑟余晖1 天前
JDK 26 新特性详解
java·开发语言