2017下半年软工(桥接模式)

news2025/1/15 6:26:49

题目——桥接模式(抽象调用实现部分)

在这里插入图片描述

package org.example.桥接模式;

/**
 * 桥接模式的核心思想是将抽象部分与它的实现部分分离,使它们可以独立变化,就是说你在实现部分:WinImp、LinuxImp基础上还能加上RedHatImp,抽象部分:JpegImage、BmpImage、GifImage的基础上还能加上JpgImage。
 * Image 是抽象部分,Implementor 是实现部分。这是因为 Image 类拥有对 Implementor 的引用,并通过这个引用调用 Implementor 的方法。在桥接模式中,抽象部分(Image)依赖于实现部分(Implementor)。
 * Image 类的 parseFile 方法:这个方法通过调用 imp.doPaint(new Matrix()) 完成图像文件的解析操作。关键在于,它使用了一个 Implementor 对象 imp,但具体的实现是由 Image 的子类来决定的。
 *
 * @author lst
 * @date 2023年12月07日 14:30
 */
class Matrix {
}

abstract class Implementor {
    (1)
}

class WinImp extends Implementor {
    public void doPaint(Matrix m) {

    }
}

class LinuxImp extends Implementor {
    public void doPaint(Matrix m) {

    }
}

abstract class Image {
    public void setImp(Implementor imp) {
        this.imp = imp;
    }

    public abstract void parseFile(String fileName);

    //用于保存实现部分的对象
    protected Implementor imp;
}

class BMPImage extends Image {
    //完成对图像文件的解析操作,而 imp 的具体实现是由 Image 的子类决定的
    @Override
    public void parseFile(String fileName) {
        (2)
    }
}

class GIFImage extends Image {

    @Override
    public void parseFile(String fileName) {

    }
}

class JPEGImage extends Image {

    @Override
    public void parseFile(String fileName) {

    }
}

class Main {
    public static void main(String[] args) {
        //Linux上查看demo.gif图像文件
        Image image = (3);
        Implementor imageImpl = (4);
        (5)
        image.parseFile("demo.gif");
    }
}

答案

(1)public abstract void doPaint(Matrix m);
(2)this.imp.doPaint(new Matrix());
(3)new GIFImage()
(4)new LinuxImp()
(5)image.setImp(imageImpl);

解析

这段代码是在使用桥接模式,目的是让不同的图像文件在不同的操作系统上显示。

先介绍几个主要的类:

Implementor 类(实现者类):这个类定义了一个操作 doPaint,但不指定具体的实现。有两个具体的子类,分别是 WinImp 和 LinuxImp,它们分别代表在 Windows 和 Linux 操作系统上的实际图像操作。

Matrix 类:这个类可能用于表示图像矩阵,但在这个例子中没有被用到,可能是作者为了演示桥接模式而故意加上去的。

Image 类:这是另一个抽象类,代表图像。有三个具体的子类 BMPImage、GIFImage、JPEGImage,它们分别表示不同格式的图像。Image 类中有一个成员变量 imp,它的类型是 Implementor,用来执行具体的图像操作。

关键的点在于 Image 类的 parseFile 方法。这个方法调用 imp.doPaint(new Matrix()) 来执行图像的解析和显示操作。这个方法在 Image 的子类中被具体实现,不同的子类可以指定不同的 imp,从而在不同的操作系统上显示图像。

在 Main 类中,演示了如何创建一个 GIFImage 对象,然后设置它的实现者(imp)为 LinuxImp,最后解析 “demo.gif” 图像文件。这就是桥接模式的应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1294442.html

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

相关文章

Java零基础——Elasticsearch篇

1.Elasticsearch简介 Elasticsearch是一个基于Lucene的一个开源的分布式、RESTful 风格的搜索和数据分析引擎。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中&#xf…

入门指南:使用Prometheus监控Linux服务器

Prometheus介绍 Prometheus是一款开源的监控系统,主要用于收集、存储和查询时间序列数据,以便于对系统进行监控和分析。以下是Prometheus的架构图介绍: Prometheus的架构由四个主要组件组成: Prometheus Server(Prom…

【EI会议征稿中】2024年第四届人工智能、自动化与高性能计算国际会议(AIAHPC 2024)

2024年第四届人工智能、自动化与高性能计算国际会议(AIAHPC 2024) 2024 4th International Conference on Artificial Intelligence, Automation and High Performance Computing 2024第四届人工智能、自动化与高性能计算国际会议(AIAHPC 2024)将于20…

Java实现Socket聊天室

一、网络编程是什么? 在网络通信协议下,不同计算机上运行的程序,进行数据传输。 应用场景:即时通讯、网游对战、金融证券、国际贸易、邮件、等等。 不管是什么场景,都是计算机与计算机之间通过网络进行数据传输。 …

用23种设计模式打造一个cocos creator的游戏框架----(三)外观模式模式

1、模式标准 模式名称:外观模式 模式分类:结构型 模式意图:为一组复杂的子系统提供了一个统一的简单接口。这个统一接口位于所有子系统之上,使用户可以更方便地使用整个系统。 结构图: 适用于: 当你想为…

如何将超过 32000 个字符放入富文本控件中?

在上一篇文章中,我们了解了如何将一整个文件的内容加载的富文本控件中。 我们给出的例子代码运作得还挺符合预期的,但会碰到这样一个问题。 有一天,你尝试使用它来显示法律部门提供的许可协议在产品的安装程序中。 这是一篇巨大的文本文件&a…

软件测试入门:静态测试

什么是静态测试 顾名思义,这里的静态是指程序的状态,即在不执行代码的情况下检查软件应用程序中的缺陷。进行静态测试是为了仅早在开发的早期阶段发现程序缺陷,因为这样可以更快速地识别缺陷并低成本解决缺陷,它还有助于查找动态测…

CubeMx HAL STM32H750 1ms

关于STM32的定时器都通用 timer(单位US)(分频值*重装值) / 定时器所在总线的时钟频率(单位MHZ) 1000us 1 ms

Vue3拖拽功能【VueDraggablePlus】

一、介绍 由于 Sortablejs 的 vue3 组件一直没有更新,已经跟 vue3 严重脱节,所以诞生了这个项目,这个组件是基于 Sortablejs 的,所以如果你想了解更多关于 Sortablejs 的信息,可以查看Sortablejs 官网。VueDraggableP…

netty源码:(9)ChannelId

ChannelId代表了一个Channel的全局标识符。它提供了asShortText和asLongText两个方法来返回对应的字符串

毅速3D打印随形透气钢:透气与形状完美结合

随着科技的飞速发展,3D打印技术已经逐渐渗透到我们生活的各个角落。从简单的塑料玩具到复杂的汽车零部件,再到高精度的医疗器械,3D打印以其独特的优势正在改变着世界的生产方式。今天,我们一起了解一下毅速3D打印随形透气钢技术&a…

Java se之类和对象

目录 类的定义格式如何去自定义this的引用如何初始化对象构造方法的定义和使用 类的定义格式 class ClassName{ //属性(成员变量) //行为(成员方法) } 1>变量与方法 1.成员变量:普通成员变量 静态成员变量 2.成员方法:普通成员方法 静态成员方法 其中的静态变量与方法,在后…

AtCoder ABC周赛2023 11/4 (Sat) D题题解

目录 原题截图: 题目大意: 主要思路: 注意事项(很多人再这个地方掉坑): 代码: 原题截图: 题目大意: 给你两个数组(A和B)长度都为n,然你求出一…

外汇天眼:什么时段做外汇交易最好,有所谓的“最佳时间点”吗?

在外汇交易的时候,很多手动交易的投资者不知道到底什么时间段操作交易最适合自己。 我们在进行选择最佳交易时间的时候,一定要明白各时间段的全球各个市场的交易状况,这样你才能分配好自己的时间。 当然在通过技术分析与基本分析选择好币种后…

快速入门FastAPI中的Field参数

快速入门FastAPI中的Field参数 在构建RESTful API时,定义资源模型是至关重要的。FastAPI是一个用于构建API的现代Python web框架,它使用Pydantic库来处理数据验证和模型。在这个过程中,Field 参数起着关键的作用。 本教程将向您介绍如何在F…

Hive HWI 配置

前言 1、下载安装好hive后,发现hive有hwi界面功能,研究下是否可以运行,于是使用hive –service hwi命令启动hwi界面报错。 启动hwi功能 2、访问192.168.126.110:9999/hwi,发现访问错误 一、HWI介绍 HWI(Hive Web Int…

“构建智慧城市,共享美好生活“2024杭州国际智慧城市展览会

智慧城市作为当今社会发展的必然趋势,正在被越来越多的企业和观众所关注。为了进一步推动智慧城市的发展,2024杭州智慧城市展览会将于4月份在杭州国际博览中心盛大召开。目前,招商工作已近半程,大批国内外知名企业踊跃报名&#x…

如何评估和提高网页速度?

页面内容的加载速度称为页面的网站速度或加载速度。拥有快速的网站加载时间对于搜索引擎优化至关重要。页面加载时间受多个变量影响,包括虚拟主机和页面大小。桌面版和移动版网站之间也存在性能差距。了解页面速度如何影响搜索引擎优化,从何处获取衡量工…

基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(一)——创建Glue

1 通过Athena查询s3中的数据 此实验使用s3作为数据源 ETL: E extract 输入 T transform 转换 L load 输出 大纲 1 通过Athena查询s3中的数据1.1 架构图1.2 创建Glue数据库1.3 创建爬网程序1.4 创建表1.4.1 爬网程序创建表1.4.2 手动创建表 1…

Linux---网络时间服务器

本章主要介绍网络时间服务器。 使用chrony配置时间服务器配置chrony客户端向服务器同步时间 时间同步的必要性 一些服务对时间要求非常严格,例如,下图所示的由三台服务器搭建的ceph集群。 这三台服务器的时间必须保持一致,如果不一致&am…