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

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

相关推荐
啊阿狸不会拉杆几秒前
数据结构-图
java·c语言·数据结构·c++·python·算法·图论
码熔burning18 分钟前
【MQ篇】初识RabbitMQ保证消息可靠性
java·分布式·rabbitmq·可靠性
北漂老男孩31 分钟前
Spring Boot 自动配置深度解析:从源码结构到设计哲学
java·spring boot·后端
unique_落尘32 分钟前
java操作打印机直接打印及详细linux部署(只适用于机器和打印机处于同一个网段中)
java·linux·打印机
小咕聊编程44 分钟前
【含文档+PPT+源码】基于SpringBoot+Vue的移动台账管理系统
java·spring boot·后端
佩奇的技术笔记1 小时前
Java学习手册:TCP 协议基础
java·tcp/ip
霸道流氓气质1 小时前
Java中将CST格式的时间字符串进行格式化
java
稻草猫.1 小时前
【Java 数据结构】泛型
java·数据结构
-曾牛1 小时前
Spring Boot常用注解详解:实例与核心概念
java·spring boot·后端·spring·java-ee·个人开发·spring boot 注解
苏近之1 小时前
说明白 Rust 中的泛型: 泛型是一种多态
设计模式·rust