当前位置: 首页 > news >正文

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

一.桥接模式核心要点

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

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

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

三.桥接模式举例讲解

  • 1.业务:

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

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

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

 /*** 电脑类型*/public interface Computer {String getTypeName();}public class Laptop implements Computer{@Overridepublic String getTypeName() {return "笔记本电脑";}}public class Desktop implements Computer{@Overridepublic String getTypeName() {return "台式电脑";}}/*** 可以随意添加,不会影响其他类*//*public class Aad implements Computer{@Overridepublic String getTypeName() {return "平板电脑";}}*/
    • (2)电脑品牌抽象类与实现类

 /*** 品牌*/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);}@Overridepublic String getBrand() {return "华硕";}
}
/*** 戴尔电脑*/
public class Dell extends Brand{public Dell(Computer computer) {super(computer);}@Overridepublic String getBrand() {return "戴尔";}
}
/*** 联想电脑*/
public class Lenovo extends Brand{public Lenovo(Computer computer) {super(computer);}@Overridepublic String getBrand() {return "联想";}
}/*** 可以随意添加,不会影响其他类*/
/*public class Shenzhou extends Brand{public Shenzhou(Computer computer) {super(computer);}@Overridepublic String getBrand() {return "神州";}
}*/
    • (3)桥接模式调用

/*** 桥接模式:可以取代多层继承的方案!**/
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):装饰器模式
          设计模式持续更新中…

http://www.lryc.cn/news/328284.html

相关文章:

  • Java切面编程
  • 微服务demo(二)nacos服务注册与集中配置
  • 面试题库二
  • HarmonyOS实战开发-如何实现一个简单的电子相册应用开发
  • FFmpeg将绿幕视频处理成透明视频播放
  • 【2024系统架构设计】案例分析- 4 嵌入式
  • 基于javaweb(springboot+mybatis)生活美食分享平台管理系统设计和实现以及文档报告
  • 【MySQL探索之旅】MySQL数据表的增删查改——约束
  • 【Linux】体验一款开源的Linux服务器运维管理工具
  • STM32 软件I2C方式读取AS5600磁编码器获取角度例程
  • [WTL/Win32]_[初级]_[如何设置ListView的列宽不出现水平滚动条]
  • Mac更换JDK版本
  • Day55:WEB攻防-XSS跨站CSP策略HttpOnly属性Filter过滤器标签闭合事件触发
  • root_fs文件系统结构分析和内核加载流程
  • macOS系统配置RUST开发环境
  • Android 15全面解读:性能飙升、隐私守护与智能生活新纪元
  • Java项目:80 springboot师生健康信息管理系统
  • 云服务器配置 docker-spark
  • Matlab之求直角坐标系下两直线的交点坐标
  • Python3:ModuleNotFoundError: No module named ‘elftools‘
  • 【Vue】创建vue项目 npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED
  • 5、Cocos Creator 动作系统
  • web3 token 如何理解
  • unity pivot和center的区别
  • Python学习笔记-简单案例实现多进程与多线程
  • python常用的语法
  • 【计算机网络】概述
  • 【Flink connector】文件系统 SQL 连接器:实时写文件系统以及(kafka到hive)实战举例
  • RpcContext :提供了在 RPC 调用过程中访问当前调用信息的方法
  • 机器学习 - 提高模型 (代码)