【编程素质】设计模式-桥接模式

2024-02-20 13:08

本文主要是介绍【编程素质】设计模式-桥接模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1,概念

桥接模式(Bridge Pattern):

将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化。
在不破坏类封装性的基础上,使得类可以同不曾估计到的系统进行交互。

2,场景

①需要跨越多个平台的图形和窗口系统上。
如:JDBC(提供两套接口,一个面向数据库厂商,一个面向JDBC使用者)
②需要不同的方式改变接口和实现。

3,demo

1)汽车

①需求

对于汽车有不同的类型,它们所行驶的环境(高速、公路)也在变化。在系统中如何适应这两方面的变化?

②传统做法

通过多次继承实现。
这里写图片描述
遵循了开放-封闭原则的同时,违背了类的单一职责,即一个类只有一个引起它变化的原因。
因为继承太多,难于维护,可扩展性差,重复代码也很多。

③桥接模式

这里写图片描述

package bridge_pattern;public class Main {public static void main(String[] args){AbstractRoad roadSpeedWay = new SpeedWay();roadSpeedWay.setCar(new Car());roadSpeedWay.Run();System.out.println("==============");AbstractRoad roadStreet = new Street();roadStreet.setCar(new Bus());roadStreet.Run();}
}
package bridge_pattern;//抽象汽车类
public abstract class AbstractCar {public abstract void Run(); 
}
package bridge_pattern;public class Car extends AbstractCar{@Overridepublic void Run() {System.out.println("小汽车在");}
}
package bridge_pattern;public class Bus extends AbstractCar{@Overridepublic void Run() {System.out.println("公共汽车在");}
}
package bridge_pattern;public abstract class AbstractRoad {private AbstractCar car;public void setCar(AbstractCar car){this.car = car;car.Run();}public abstract void Run();
}
package bridge_pattern;public class SpeedWay extends AbstractRoad{@Overridepublic void Run() {System.out.println("高速公路");}
}
package bridge_pattern;public class Street extends AbstractRoad{@Overridepublic void Run() {System.out.println("市区街道");}
}

4,优缺点

优:
①将实现和界面解耦。使抽象喝实现可以沿着各自的维度来变化。
②抽象和实现可以独立扩展。
③对于“具体的抽象类”所做的改变,不会影响到客户。
缺:
增加了复杂度。

这篇关于【编程素质】设计模式-桥接模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/728303

相关文章

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R