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

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

java 复制代码
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" 图像文件。这就是桥接模式的应用。

相关推荐
bikong72 天前
桥接模式,打造灵活可扩展的日志系统C++
c++·桥接模式
人生匆匆6 天前
openEuler 24.03 (LTS-SP2)简单KVM安装+桥接模式
linux·服务器·桥接模式
青草地溪水旁16 天前
VMware 设置 Ubuntu 虚拟机桥接模式完整教程
linux·ubuntu·桥接模式
牛奶咖啡1325 天前
学习设计模式《二十三》——桥接模式
学习·设计模式·桥接模式·认识桥接模式·桥接模式的优点·何时选用桥接模式·桥接模式的使用示例
melonbo1 个月前
桥接模式C++
开发语言·c++·设计模式·桥接模式
青衫客361 个月前
浅谈 VM 桥接模式:让虚拟机像真实电脑一样接入网络
网络·桥接模式·vm
IT小白架构师之路2 个月前
常用设计模式系列(九)—桥接模式
设计模式·桥接模式
sanqima2 个月前
使用“桥接模式“,实现跨平台绘图或多类型消息发送机制
桥接模式·消息发送·多平台·图形绘制
云和数据.ChenGuang2 个月前
KVM中使用桥接模式.运维就业技术教程
运维·桥接模式·运维技术教程
归云鹤2 个月前
设计模式五:桥模式(Bridge Pattern)
算法·设计模式·桥接模式