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

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 的子类决定的@Overridepublic void parseFile(String fileName) {(2)}
}class GIFImage extends Image {@Overridepublic void parseFile(String fileName) {}
}class JPEGImage extends Image {@Overridepublic 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.lryc.cn/news/258046.html

相关文章:

  • Hive 浅析
  • C 语言中,结构体「.」与「->」的区别
  • 【Java Web学习笔记】5 - XML
  • 在jupyter notebook中修改其他文件的解决方案
  • 如何在Android中旋转屏幕时避免重新绘制Activity
  • 离线环境下安装python库(推荐pip download)
  • ubuntu16.04安装ROS+Gazebo
  • 手动搭建koa+ts项目框架(路由篇)
  • c语言:文件操作(1)
  • 运筹学经典问题(三):最大流问题
  • 裸机开发与Linux驱动开发的区别
  • 【蓝桥杯选拔赛真题75】Scratch行走的螃蟹 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析
  • 小型洗衣机哪个牌子质量好?迷你洗衣机排名前十名
  • MySQL_9.B-数索引
  • ubuntu-更改镜像源-系统初始化-安装Clion-C++编译环境-Java安装
  • c语言-动态内存管理
  • 【JAVA杂货铺】一文带你走进面向对象编程的构造方法 | Java| 面向对象编程 | (中)
  • 动态规划学习——通符串匹配,正则表达式
  • 【数据开发】Hive 多表join中的条件过滤与指定分区
  • 基于Java SSM框架实现高校人事管理系统项目【项目源码】计算机毕业设计
  • [C++] 模板进阶(非类型模板参数,特化,分离编译)
  • C++ this指针
  • 解决Sortable拖动el-table表头时,由于选择列造成的拖拽顺序错乱的bug
  • Plantuml之类图语法介绍(十六)
  • 深入Docker命令行:探索常用命令和实用技巧
  • qt 容器QVector,QMap,QHash的常见使用与该迭代器的简单介绍
  • 两线制无源 4-20mA 回路供电隔离变送器
  • 强化学习优质博客记录(随缘更新)
  • RabbitMQ-hello
  • 案例044:基于微信小程序的消防隐患在线举报系统