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

桥接模式类图与代码

欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。以绘制直线和圆形为例,对应的绘图程序如表 7.7 所示。

根据绘图软件的扩展性要求,该绘图软件将不断扩充新的图形和新的绘图程序。为了避免出现类爆炸的情况,现采用桥接(Bridge)模式来实现上述要求,得到如图 7.21 所示的类图。

桥接模式将抽象与其实现解耦,使它们都可以独立地变化。也就是说:将一组实现与另一组使用它们的对象分离。这里的实现指的是抽象类及其派生类用来实现自己的对象(而不是抽象类的派生类,这些派生类被称为具体类)。

【Java代码】

public abstract class Drawing {public abstract void drawLine(double xl,double yl,double x2,double y2);public abstract void drawCircle(double x,double y,double r);
}public class DP1 {public static void draw_a_line(double xl,double yl,double x2,double y2){/*代码省略 */}public static void draw_a_circle(double x,double y,double r){/*代码省略 */}
}public class DP2 {public static void drawLine(double xl,double x2,double yl,double y2) {/*代码省略 */}public static void drawCircle(double x,double y,double r) {/*代码省略 */}
}public class V1Drawing extends Drawing {public void drawLine(double xl,double yl,double x2,double y2) {DP1.draw_a_line();}public void drawCircle(double x,double y,double r) {DP1.draw_a_circle(x,y,z);}
}public class V2Drawing extends Drawing {public void drawLine(double xl,double yl,double x2,double y2){DP2.drawLine();}public void drawCircle(double x,double y,double r){DP2.drawCircle(x,y,z);}
}public abstract class Shape {protected Drawing _dp;public abstract void draw();Shape(Drawing dp) {_dp = dp;}public void drawLine(double xl,double yl,double x2,double y2) {dp.drawLine(xl,y1,x2,y2);}public void drawcircle (double x,double y,double r) { dp.drawcircle (x,y,r);}
}public class Rectangle extends Shape {private double _xl,_x2,_yl,_y2;public Rectangle(Drawing dp,double xl,double yl,double x2,double y2){/*代码省略 */}public void draw(){/*代码省略 */}
}public class Circle extends Shape {private double _x,_y,_r;public Circle(Drawing dp,double x,double y,double r){/*代码省略去 */}public void draw() {drawcircle(_x,_y,_r);}
}

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

相关文章:

  • Oracle count的优化-避免全表扫描
  • leetcode17. 电话号码的字母组合
  • 如何设计与管理一个前端项目
  • 【MQTT】mosquitto 的 “下载、交叉编译、使用” 详细教程,手把手搭建一个MQTT Broker
  • 用云手机打造海外社媒矩阵
  • 第 8 章 机器人平台设计之底盘实现(自学二刷笔记)
  • ✔ ★Java项目——设计一个消息队列(五)【虚拟主机设计】
  • ntfs文件系统的优势 NTFS文件系统的特性有哪些 ntfs和fat32有什么区别 苹果电脑怎么管理硬盘
  • Python Web框架Django项目开发实战:创建在线学习应用
  • 用得助全媒体呼叫中心,让AI落到实处帮品牌做营销
  • 【吃透Java手写】2-Spring(下)-AOP-事务及传播原理
  • Spring原理分析--获取Environment资源对象
  • Android GPU渲染SurfaceFlinger合成RenderThread的dequeueBuffer/queueBuffer与fence机制(2)
  • 人民币数字和中文汉字转换
  • 07_Flutter使用NestedScrollView+TabBarView滚动位置共享问题修复
  • Java解决垂直鉴权问题(对垂直权限进行校验)
  • 【MySQL工具】pt-heartbeat
  • 实现vant的年月日时分秒组件
  • typescript 命名空间、装饰器
  • GPT问答SAP BW
  • 使用zdppy_amauth开发激活用户接口
  • c++ memset 指针示例
  • 24考研双非上岸武汉理工大学电子信息专硕,855考研经验
  • 使用KubeKey 快速交付k8s v1.28.8集群
  • nginx--压缩https证书favicon.iconginx隐藏版本号 去掉nginxopenSSL
  • 通俗的理解网关的概念的用途(四):什么是网关设备?(网络层面)
  • Spring JdbcTemplate实现自定义动态sql拼接功能
  • 第十一篇:操作系统新纪元:智能融合、量子跃迁与虚拟现实的交响曲
  • 【大数据】学习笔记
  • PHP 框架安全:ThinkPHP 序列 漏洞测试.