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

结构型模式-桥接模式

用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,这两种类型的类可被结构化改变而互不影响。

桥接模式的目的是将抽象与实现分离,使它们可以独立地变化,该模式通过将一个对象的抽象部分与它的实现部分分离,使它们可以独立地改变。它通过组合的方式,而不是继承的方式,将抽象和实现的部分连接起来。

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

主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。

何时使用:实现系统可能有多个角度分类,每一种角度都可能变化。

如何解决:把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。

关键代码:抽象类依赖实现类。

public interface DrawAPI {void drawCircle(int radius, int x, int y);
}
public class GreenCircle implements DrawAPI{@Overridepublic void drawCircle(int radius, int x, int y) {System.out.println("Drawing Circle[ color: green, radius: "+ radius +", x: " +x+", "+ y +"]");}
}
public class RedCircle implements DrawAPI{@Overridepublic void drawCircle(int radius, int x, int y) {System.out.println("Drawing Circle[ color: red, radius: "+ radius +", x: " +x+", "+ y +"]");}
}
public abstract class Shape {protected DrawAPI drawAPI;protected Shape(DrawAPI drawAPI){this.drawAPI = drawAPI;}public abstract void draw();
}
public class Circle extends Shape{private int x, y, radius;public Circle(int x, int y, int radius, DrawAPI drawAPI) {super(drawAPI);this.x = x;this.y = y;this.radius = radius;}@Overridepublic void draw() {drawAPI.drawCircle(radius,x,y);}
}
    @Testpublic void test14(){Shape redCircle = new Circle(100,100, 10, new RedCircle());Shape greenCircle = new  Circle(100,100, 10, new GreenCircle());redCircle.draw();greenCircle.draw();}

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

相关文章:

  • 缓存的放置时间和删除时间
  • 内网穿透实战应用-如何通过内网穿透实现远程发送个人本地搭建的hMailServer的邮件服务
  • ensp基础命令大全(华为设备命令)
  • thinkphp6 入门(4)--数据库操作 增删改查
  • MyBatisPlus 基础实现(一)
  • jmeter 计数器Counter
  • OpenCV(十九):模板匹配
  • 【iOS】Category、Extension和关联对象
  • 支持向量机(一)
  • MyBatis中至关重要的关系映射----全方面介绍
  • 47、TCP的流量控制
  • 密码学入门——环游密码世界
  • 笔记本家庭版本win11上win+r,运行cmd默认没有管理员权限,如何调整为有管理员权限的
  • MavenCentral库发布记录
  • 小程序进阶-env(safe-area-inset-bottom)的使用
  • 移动端App持续集成体系构建实战
  • Mybatis的关联关系配置一对一,一对多,多对多的映射关系
  • 计算机竞赛 基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类
  • 时序预测 | MATLAB实现CNN-BiGRU卷积双向门控循环单元时间序列预测
  • [Rust GUI]0.10.0版本iced代码示例 - progress_bar
  • 使用vue-pdf出现的卡顿,空白,报错,浏览器崩溃解决办法
  • (笔记七)利用opencv进行形态学操作
  • Spring是什么?
  • 电梯SIP-IP五方对讲管理系统
  • leetcode283移动零
  • Docker 部署SpringBoot项目,使用外部配置文件启动项目
  • 电子半导体行业电能质量监测与治理系统解决方案 安科瑞 许敏
  • pdfh5在线预览pdf文件
  • Java智慧工地大数据中心源码
  • 关于人工智能的担忧