桥接模式类图与代码

news2024/12/24 1:57:09

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

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

相关文章

[Docker]容器的网络类型以及云计算

目录 知识梗概 1、常用命令2 2、容器的网络类型 3、云计算 4、云计算服务的几种主要模式 知识梗概 1、常用命令2 上一篇已经学了一些常用的命令,这里补充两个: 导出镜像文件:[rootdocker ~]# docker save -o nginx.tar nginx:laster 导…

基于SSM的农产品销售管理系统

文章目录 项目介绍一、项目功能介绍二、部分页面展示三、部分源码四、底部获取全部源码(9.9¥带走) 项目介绍 农产品销售管理系统 一、项目功能介绍 一、介绍 系统分为两个角色 用户功能:登陆,注册,商品分…

实操专区-第11周-课堂练习专区-图的标记线和标记点

下载安装ECharts,完成如下样式图形。 代码和截图上传 完成 3.1.3.5 图的标记线和标记点 中的任务点 在一些折线图或柱状图当中,可以经常看到图中对最高值和最低值进行了标记。 在ECharts中,标记点(markPoint)常用于表示…

深入解析C#中的async和await关键字

文章目录 一、异步编程的基本概念及其在C#中的实现二、async关键字的定义及其用法三、await关键字的定义及其用法示例代码:使用async和await编写一个简单的异步程序 四、async和await的优点注意事项 五、C#下async和await中常见问题汇总1. 异步方法中的await调用2. …

森林消防泵:操作、购买攻略!/恒峰智慧科技

随着气候变化和人为活动的影响,森林火灾频繁发生,对生态环境和人类安全构成严重威胁。森林消防泵作为森林火灾扑救的重要设备,其性能和操作便捷性直接关系到灭火效果。本文将为您详细介绍森林消防泵的操作指南和购买攻略,助您更好…

【网站项目】戒烟网站

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

【林业资质申报指南】申报林业工程调查规划设计丙级申报材料

【林业资质申报指南】申报林业工程调查规划设计丙级申报材料 申报林业工程调查规划设计丙级申报材料需要包括以下内容: 一、申报单位基本情况 申报单位应提供详细的单位介绍,包括单位名称、注册地址、法定代表人、注册资本、成立时间、经营范围等基本情况…

智慧校园的优势

数字化校园的建造给传统校园带来了生机与生机,数字化校园的每项设备都给学生带来了很好的体验。如不久前的开学季,许多校园运用校园一卡通体系,处理了往日人山人海的校园迎新现象,取而代之的是安静、有序的重生报到场景&#xff0…

Low Poly Animated Prehistoric Animals

该资源包与全球最优秀的古生物学家携手打造,以精确的形态和动画让史前动物栩栩如生。高质量上装束的低多边形动物,带有动画、惊艳的演示场景和漫游脚本:—内容— - 漫游脚本(V.4.5)可以将活的动物拖放到场景中 - 上装束的动物 - 优美的演示场景 - 支持 Mecanim - 20 种动物…

张大哥笔记:自媒体人10种赚钱方法

很多人都在做自媒体,比如平台广告分成、广告收入、公关宣传、品牌植入、演讲、会员制、出书、线下活动。那么本文介绍了自媒体人10种赚钱方法,供大家参考: 1、打造个人IP 什么是个人IP?在百度百科上是这样解释的:指个…

学术咸鱼入门指南(2)

巧用思维导图阅读文献 化整为零:读文献,从拆分文章的结构开始 大家在初步接触自己学科的论文时,要了解清楚基本的范式,日后读起来就比较顺了。 科研论文的第一部分,是文章的标题,摘要和关键词&#xff0…

机器学习之基于Python多种混合模型的糖尿病预测

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 糖尿病是一种慢性代谢性疾病,其发病率在全球范围内逐年上升,已成为影响人类健…

第11篇:创建Nios II工程之控制多个七段数码管

Q:DE2-115开发板上有8个七段数码管,如何用PIO IP并设计Nios II工程控制呢? A:基本思路:DE2-115上有8个7位七段数码管,而一个PIO最多可配置为32位,如此就可以添加2个PIO都配置为28位output。 Ni…

数据结构:环形链表的实战指南

✨✨小新课堂开课了,欢迎欢迎~✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:http://t.csdnimg.cn/oHJAK(数据结构与算法) 小新的主页:编程版小新-CSDN博客 …

Jackson系统开发方法

1、Jackson分析方法是面向数据流的分析方法。这一方法从目标系统的输入、输出数据结构入手,导出程序框架结构,再补充其它细节,就可得到完整的程序结构图。 2、应用场景:这一方法对输入、输出数据结构明确的中小型系统特别有效&am…

人工智能实验:人脸检测

一、实现目的: 了解人脸检测的主要方法;了解 detectMultiScale 函数的功能及用法;掌握使用 OpenCV 提供的分类器和检测器进行人脸检测的方法。 二、实验设备: 计算机一台;视觉实验软件环境及资源一套(vi…

明星中药企业系列洞察(一)丨官宣提价后股价涨幅近15%,百年老字号佛慈制药如何焕发力量?

近日,佛慈制药发布公告称,鉴于原材料以及生产成本上涨等原因,公司对主营中成药产品的出厂价进行调整,平均提价幅度为9%。提价消息释出后,资本市场给出了态度:佛慈制药股价连续两天累计上涨近15%。佛慈制药近…

【一起深度学习——NIN】

NIN神经网络 原理图:代码实现:输出结果: 原理图: 代码实现: import torch from torch import nn from d2l import torch as d2ldef nin_block(in_channels, out_channels, kernel_size, strides, padding):return nn.…

HIDL Hal 开发指南7 —— 驱动开发

前言 HIDL HAL 的整体架构如下图所示: 接下来我们就来完成一个从驱动到 App 的完整 HIDL HAL 实现示例。 本节的任务是在内核中实现一个简单的驱动,并完成一个应用层 Native 程序来测试我们的驱动是否正常工作。 1 编写一个简单的 Linux 内核驱动 1.…

8G防火墙,WAF防火墙,可抵御各种恶意请求、恶意机器人、攻击防御

8G防火墙,WAF防火墙,可抵御各种恶意请求、恶意机器人、攻击防御 经过一年多的 beta 测试,8G 防火墙已准备好在生产现场使用。因此,您可以受益于 nG 防火墙(又名 nG 黑名单)的最新发展提供的强大保护。8G 防…