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

设计模式:19、桥接模式

目录

0、定义

1、桥接模式的四种角色

2、桥接模式的UML类图

3、示例代码


0、定义

        将抽象部分与实现部分分离,使它们都可以独立地变化。

1、桥接模式的四种角色

  • 抽象(Abstraction):一个抽象类,包含实现者(Implementor)声明的变量。
  • 实现者(Implementor):实现者角色是一个接口(抽象类),该接口(抽象类)中的方法不一定与Abstraction类中的方法一致。Implementor接口(抽象类)负责定义基本操作,而Abstraction类负责定义基于这些操作的较高层次的操作。
  • 细化抽象(Refined Abstraction):细化抽象抽象角色的一个子类,该子类在重写(覆盖)抽象角色中的方法时,在给出一些必要的操作后,将委托Implementor类型对象调用相应的方法。
  • 具体实现者(Concrete Implementor):具体实现者是实现(拓展)Implementor接口(抽象类)的类

2、桥接模式的UML类图

3、示例代码

实现者(对修改关闭)

package xyz.jangle.design.bridge;public interface Implementor {public void operationImp();}

抽象(对修改关闭)

package xyz.jangle.design.bridge;public abstract class Abstraction {Implementor impl;public Abstraction(Implementor impl) {super();this.impl = impl;}public abstract void operation();}

细化抽象(对拓展开放,可以实现多个细化抽象)

package xyz.jangle.design.bridge;public class RefinedAbstraction extends Abstraction {public RefinedAbstraction(Implementor impl) {super(impl);}@Overridepublic void operation() {impl.operationImp();	//重要实现部分由Implementor的子类的operationImp()方法负责。}}

具体实现者1(对拓展开放,可以新增具体实现者。)

package xyz.jangle.design.bridge;public class ConcreteImplementor1 implements Implementor {@Overridepublic void operationImp() {System.out.println("to do something 1 ");}}

具体实现者2

package xyz.jangle.design.bridge;public class ConcreteImplementor2 implements Implementor {@Overridepublic void operationImp() {System.out.println("to do something 2 ");}}

客户端(使用)

package xyz.jangle.design.bridge;public class AppMain19 {public static void main(String[] args) {ConcreteImplementor1 implementor1 = new ConcreteImplementor1();RefinedAbstraction refined = new RefinedAbstraction(implementor1);refined.operation();ConcreteImplementor2 implementor2 = new ConcreteImplementor2();RefinedAbstraction refined2 = new RefinedAbstraction(implementor2);refined2.operation();}}

输出结果:

to do something 1 
to do something 2 


http://www.mrgr.cn/news/79735.html

相关文章:

  • OpenCV相机标定与3D重建(14)用于组合两个旋转和平移(R|T)变换函数composeRT()的使用
  • 5G中的随机接入过程可以不用收RAR?
  • UE4 骨骼网格体合并及规范
  • 【伪代码】数据结构-期末复习 线性表
  • 【git】git回退到之前版本+拓展git命令
  • TCP/IP杂记
  • 本地搭建MQTT服务器
  • Onedrive技巧与问题
  • v-for遍历多个el-popover;el-popover通过visible控制显隐;点击其他隐藏el-popover
  • 【实操GPT-SoVits】声音克隆模型图文版教程
  • Python爬虫之urllib库使用总结
  • Mac软件推荐
  • maxscript中BoundingBox求一个模型的高度
  • C#-WPF 常见类型转换方法(持续更新)
  • 5G Multi-TRP R16~R18演进历程
  • Linux网络基础知识————网络编程
  • rk3588-ubuntu22.04系统网关实现路由器功能:
  • 《Hadoop大数据技术应用综合训练》----以NBA冠军球队计数为例
  • C# .NET CORE 开发问题汇总
  • day10 电商系统后台API——接口测试(使用postman)