设计模式(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):装饰器模式

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

相关推荐
2301_780789662 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
学长毕设3 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
步行cgn3 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川3 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
金銀銅鐵3 小时前
[Java] 用 CLI 展示 EnumMap 增删键值对时的内部变化
java·源码·ai编程
秋天的怀念_David4 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas1004 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
niucloud-admin5 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
霸道流氓气质5 小时前
智能客服组件:分层意图识别、RAG Advisor 与人工转接状态机的 Vue3 + Spring AI 生产级实战
java·人工智能·spring
captain3765 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis