桥接模式类图与代码

欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。以绘制直线和圆形为例,对应的绘图程序如表 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.mzph.cn/pingmian/7525.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Application exit(Out of memory)

Qt for WebAssembly 开发的网页,在 iOS 设备上打开会提示:Out of memory 如图: 解决办法: 环境:Qt 6.7.0 WebAssembly multi-threaded Emscripten Compiler 3.1.50 在CMakeLists.txt 中增加: set_tar…

【Osek网络管理测试】[TG4_TC4]tWaitBusSleep

🙋‍♂️ 【Osek网络管理测试】系列💁‍♂️点击跳转 文章目录 1.环境搭建2.测试目的3.测试步骤4.预期结果5.测试结果1.环境搭建 硬件:VN1630 软件:CANoe 2.测试目的 验证DUT的tWBS时间参数是否符合NM标准 本处规定tWBS在[1350ms,1650ms]范围内符合要求 3.测试步骤…

使用Docker安装MySQL5.7.36

拉取镜像并查看 docker pull mysql:5.7.36拉取成功后查看(非必须) docker images创建并设置宿主机 mysql 配置文件目录和数据文件目录 创建相关文件夹将容器中的mysql数据保存到本地,这样即使容器被删除,数据也不会丢失。 mkd…

Python + selenium如何截图!

废话不多说,直接进入正题 一、直接截取网页全屏 截全屏的时候,我们用到的内置方法为save_screenshot("demo1.png") from selenium import webdriver from time import sleepclass test:driver webdriver.Chrome()driver.maximize_window()…

《架构思维:从程序员到CTO》:通往顶级架构师之路

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

PCIE协议-1

1. PCIe结构拓扑 一个结构由点对点的链路组成,这些链路将一组组件互相连接 - 图1-2展示了一个结构拓扑示例。该图展示了一个称为层级结构的单一结构实例,由一个根复合体(Root Complex, RC)、多个端点(I/O设备&#xf…

ubuntu20部署3d高斯

3d高斯的链接:https://github.com/graphdeco-inria/gaussian-splatting 系统环境 ubuntu20的系统环境,打算只运行训练的代码,而不去进行麻烦的可视化,可视化直接在windows上用他们预编译好的exe去可视化。(因为看的很…

NLP中常见的tokenize方式及token类型

目录 Tokenizer的细节与计算方式Tokenizer的计算方式各种Tokenizer的优缺点 NLP中常用的Tokens单词Tokens(Word Tokens)子词Tokens(Subword Tokens)字符Tokens(Character Tokens)字节Tokens(Byt…

C语言函数

1.函数是什么 在数学里,函数是一种对应关系,而 C 语言里的函数和数学中的函数具有相似点,但是有很大的不同,甚至有些人认为“函数”这个名词不够恰当。准确来说,C 函数的函数是一种子程序,您可以去 Wiki 百科查看对子程序的解释。 所谓的子程序,实际上就是大型程序中的…

[linux] pytorch各种报错

1. matplot lib "fatal IO error 25 (Inappropriate ioctl for device) on X server “localhost:10.0” 解决方案: import matplotlib matplotlib.use(Agg) 2. Error ALSA Carla 0.9.9 报错信息为: 4.24.3-0UE4Release-4.24 518 0 Disabling c…

暗区突围pc端资格发放了吗 暗区突围pc测试资格怎么获取

暗区突围pc端资格发放了吗 暗区突围pc测试资格怎么获取 暗区突围是一款很火爆的第一人称射击网游,现在终于要上线PC端啦!小伙伴们是不是已经迫不及待想要体验电脑上的硬核射击快感了?暗区突围pc端资格已经陆续发放,想要参与PC端…

TC8002D 是一颗带关断模式的音频功放IC

一、一般概述 TC8002D是一颗带关断模式的音频功放IC。在5V输入电压下工作时,负载(3Ω)上的平均功率 为3 W,且失真度不超过10%。而对于手提设备而言,当VDD作用于关断端时,TC8002D将会进入关断模式,此时的功耗极…

Redis的几种集群模式

主从复制模式: 主从复制是Redis最简单的集群模式。这个模式主要是为了解决单点故障的问题,所以将数据复制多个副本中,这样即使有一台服务器出现故障,其他服务器依然可以继续提供服务。数据会在一个主节点(master&#…

TypeScript综合练习2(文本处理)

Text Processor You’ll practice creating and transforming arrays of strings. Hello, fellow text editing and type setting enthusiast! I hear you have a dual interest in both TypeScript and and type scripts. That’s great because I have a few projects for yo…

探索淘宝API接口对接(属性规格丨sku价格丨详情图丨优惠券等):打造智能电商解决方案

一、引言 随着电子商务的快速发展,越来越多的企业和开发者希望通过自动化和智能化的方式接入电商平台,以实现更高效的数据交互和业务流程。淘宝作为中国最大的电商平台之一,其提供的API接口成为了众多企业和开发者关注的焦点。本文将探讨淘宝…

【spring】Bean的生命周期回调函数和Bean的循环依赖

目录 1、Bean的生命周期 2、Bean的生命周期回调函数 2.1、初始化的生命周期回调 2.2、销毁的生命周期回调 3、Bean的循环依赖 1、Bean的生命周期 spring的bean的生命周期主要是创建bean的过程,一个bean的生命周期主要是4个步骤:实例化,…

视频剪辑图文实例:一键操作,轻松实现视频批量片头片尾减时

视频剪辑是现代媒体制作中不可或缺的一环,而批量处理视频更是许多专业人士和爱好者的常见需求。在剪辑过程中,调整视频的片头片尾时长可以显著提升视频的质量和观感。本文将通过图文实例的方式,向您展示如何一键操作,轻松实现视频…

直播录屏怎么录?分享3种方法

随着网络直播的兴起,直播录屏已成为众多网友记录精彩瞬间、分享有趣内容的重要工具。直播录屏不仅能帮助我们回顾和保存直播中的精彩片段,还能为创作者提供更多的素材和灵感。 本文将为大家介绍3种直播录屏的方法,帮助大家能够更好地利用这一…

【IEEE独立出版|往届均已成功检索】ISPDS 2024诚邀投稿参会

第五届信息科学与并行、分布式处理国际学术会议(ISPDS 2024) 2024 5th International Conference on Information Science, Parallel and Distributed Systems 2024年5月31-6月2日 | 中国广州NEWS:会议已在格林威治大学官网上线会议已经上线到…

配置Socks5代理的詳細步驟

Socks5代理的主要優點是它能夠處理任何類型的網路流量,包括Web流覽、電子郵件、檔傳輸等。 運行Socks5代理服務的伺服器,可以是一臺物理伺服器,也可以是一臺虛擬私有伺服器。 其次,我們需要在伺服器上安裝Socks5代理軟體。常用的…