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

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

在这里插入图片描述

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” 图像文件。这就是桥接模式的应用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Javaweb之附录的详细解析

05. 附录 5.1 更新依赖索引 有时候给idea配置完maven仓库信息后,在idea中依然搜索不到仓库中的jar包。这是因为仓库中的jar包索引尚未更新到idea中。这个时候我们就需要更新idea中maven的索引了,具体做法如下: 打开设置----搜索maven----R…

编译内核之BTF报错

最近在编译5.15.138版本内核的时候,由于启用了BTF功能,导致在编译过程中报错,网上好多教程都存在坑,本人研究测试下来能用,特此记录一下,供有需要的人参考。   内核编译环境:centos7   内核配…

STM32CubeMX+micro_ros_stm32cubemx_utils库

GitHub - micro-ROS/micro_ros_stm32cubemx_utils at humble 这个就是下载这个代码库以后的文件结构。其中sample_project.ioc就是平时STM32CubeMX的工程文件。类似于visual studio里面的项目文件 。打开以后是这个样子的: 可以看到跟本文后面的那些配置是几乎一模一…

【HarmonyOS开发】拖拽动画的实现

动画的原理是在一个时间段内,多次改变UI外观,由于人眼会产生视觉暂留,所以最终看到的就是一个“连续”的动画。UI的一次改变称为一个动画帧,对应一次屏幕刷新,而决定动画流畅度的一个重要指标就是帧率FPS(F…

Vue左侧菜单栏显示问题

关于 使用若依系统,路由中左侧菜单栏一级菜单中只有一个二级菜单,一级菜单不显示的问题!!! 在一级组件中添加 alwaysShow: true,

c4--函数和指针

函数和指针 指针 函数 函数指针 1、以下选项中,合法的一组C语言数值常量是(A )。 A、12. 0Xa23 4.5e0 // B、028 5e-3 -0xf //NO C、.177 4e1.5 0abc D、0x8A 10,000 3.e5 // 不能有逗号 解答: B、028 这个有问题 C: 这个…

普冉PY32系列(十三) SPI驱动WS2812全彩LED

目录 普冉PY32系列(一) PY32F0系列32位Cortex M0 MCU简介普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境普冉PY32系列(三) PY32F002A资源实测 - 这个型号不简单普冉PY32系列(四) PY32F002A/003/030的时钟设置普冉PY32系列(五) 使用JLink RTT代替串口输出日志普冉PY32…

【数据结构(十·树结构的实际应用)】赫夫曼树(2)

文章目录 1. 基本介绍2. 赫夫曼树的创建2.1. 思路分析2.2. 代码实现 1. 基本介绍 给定 n 个权值作为 n 个叶子结点,构造一棵二叉树,若该树的 带权路径长度(wpl) 达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tre…

FL Studio21最新FL水果编曲软件中文版在哪下载?

FL Studio21水果编曲软件是一款专业的音乐制作软件,被广泛地应用于电子音乐、hip-hop、流行乐等多种音乐类型的制作。该软件提供了丰富的音频编曲工具和音乐效果器,让用户可以轻松地创作出高品质的音乐作品。同时,这也是一款非常易于上手的软…

登录rabbitMQ管理界面时浏览器显示要求进行身份验证,与此站点连接不安全解决办法

问题描述 最近在黑马学习rabbitMQ的过程中,在使用docker部署好rabbitMQ后,使用账号为:itcast,密码为:123321 登录的时候浏览器显示了这个问题,如图所示: 当时以为自己需要输入自己的浏览…

【Apipost】批量删除我的51CTO文章

文章目录 一、序二、API分析三、Apipost测试四、脚本五、Apipost中完成 一、序 去年开始再51CTO同步更新文章,一年多过去了,只涨了3个粉丝。看了下这个平台就是卖课、搞培训的,退出了。决定把文章也删除了(有人私信我说专门注册了…

RCNN 学习

RCNN算法流程 RCNN算法流程可分为4个步骤 一张图像生成1K~2K个候选区域(使用Selective Search方法)对每个候选区域,使用深度网络图特征特征送入每一类的SVM分类器,判别是否属于该类使用回归期器细修正候选框位置 1.候选区域的生…

【论文极速读】视频检索中的模态均衡方法

【论文极速读】视频检索中的模态均衡方法 FesianXu 20231206 at Baidu Search Team 前言 传统的视频搜索系统相关性部分主要以文本匹配为基础手段,在其中引入多模态向量容易收到『模态不均衡』的问题,论文[1]尝试对其进行解决,本文进行笔记。…

二维码智慧门牌管理系统升级解决方案:数字化房产管理

文章目录 前言一、全面信息记录:提升管理效率二、多种优势功能:系统化管理与无缝对接三、安全隐私保护:数据安全的重要性四、总结:提升管理效率与居住体验 前言 科技驱动房产管理 随着科技的飞速发展,房产管理领域也面…

udp多播组播

import socket ,struct,time# 组播地址和端口号 MCAST_GRP 239.0.0.1 MCAST_PORT 8888 # 创建UDP socket对象 sock socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) # 绑定socket对象到本地端口号 # sock.bind((MCAST_GRP, MCAST_PORT)) …

D28|买卖股票的最佳时机+跳跃游戏

122.买卖股票的最佳时机 II 初始思路: 这道题解题的时候比较像在找规律,发现只要计算这个过程中的两数之差然后相加即可。 题解复盘: 可以更加清晰的发现如何从题意中获得贪心的思路。 如何贪心:局部最优:收集每天的…

Unity中Batching优化的GPU实例化(3)

文章目录 前言一、UNITY_SETUP_INSTANCE_ID(v);二、在UnityInstancing.cginc文件中,看一下Unity这句话做了什么1、使用了该 .cginc 后,会自动预定义该函数2、需要满足GPU实例化条件,才会执行对应语句3、满足GPU实例化后,主要执行的…

【Web】SCU新生赛个人wp及完赛感想

目录 一些碎碎念: Web Guideline 2048 ezupload hardupload ezphp ezweb ezsql webbuilder tarit tarit_revenge VipDinner simplespi 一些碎碎念: scu新生赛是我全心全力打的第二场比赛,历时七天,期间不免煎熬&…

[GPT]Andrej Karpathy微软Build大会GPT演讲(下)--该如何使用GPT助手

该如何使用GPT助手--将GPT助手模型应用于问题 现在我要换个方向,让我们看看如何最好地将 GPT 助手模型应用于您的问题。 现在我想在一个具体示例的场景里展示。让我们在这里使用一个具体示例。 假设你正在写一篇文章或一篇博客文章,你打算在最后写这句话。 加州的人口是阿拉…

[足式机器人]Part2 Dr. CAN学习笔记-自动控制原理Ch1-2稳定性分析Stability

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-自动控制原理Ch1-2稳定性分析Stability 0. 序言1. 稳定的分类2. 稳定的对象3. 稳定的系统4. 系统稳定性的讨论5. 补充内容——Transfer Function(传递函数) - nonzero Initial Condition(非零初始…