首页 > 其他分享 >软件体系结构与设计模式之桥接模式

软件体系结构与设计模式之桥接模式

时间:2024-01-04 13:32:39浏览次数:37  
标签:桥接 void 软件体系结构 public plane 设计模式 company class

一. 单选题 1.桥接设计模式将抽象部分与它的实现部分相分离,使它们都可以独立地变化。下图为该设计模式的类图,其中,( )用于定义实现部分的接口。 image.png A. Abstraction B. ConcreteImplementorA C. ConcreteImplementorB D. Implementor 我的答案: D:Implementor;正确答案: D:Implementor;

  1. (单选题)以下陈述不属于桥接模式优点的是( )。 A. 分离接口及其实现部分,可以独立地扩展抽象和实现 B. 可以使原本由于接口不兼容而不能一起工作的那些类一起工作 C. 可以取代多继承方案,比多继承方案扩展性更好 D. 符合开闭原则,增加新的细化抽象和具体实现都很方便 我的答案: B:可以使原本由于接口不兼容而不能一起工作的那些类一起工作;正确答案: B:可以使原本由于接口不兼容而不能一起工作的那些类一起工作;

  2. (单选题)以下关于桥接模式的叙述错误的是( )。 A. 桥接模式的用意是将抽象化与实现化脱耦,使得两者可以独立地变化 B. 桥接模式将继承关系转换成关联关系,从而降低系统的耦合度 C. 桥接模式可以动态地给一个对象增加功能,这些功能也可以动态地撤销 D. 桥接模式可以从接口中分离实现功能,使得设计更具扩展性 我的答案: C:桥接模式可以动态地给一个对象增加功能,这些功能也可以动态地撤销;正确答案: C:桥接模式可以动态地给一个对象增加功能,这些功能也可以动态地撤销;

  3. (单选题)( )不是桥接模式所适用的场景。 A. 一个可以跨平台并支持多种格式的文件编辑器 B. 一个支持多数据源的报表生成工具,可以以不同图形方式显示报表信息 C. 一个可动态选择排序算法的数据操作工具 D. 一个支持多种编程语言的跨平台开发工具 我的答案: C:一个可动态选择排序算法的数据操作工具;正确答案: C:一个可动态选择排序算法的数据操作工具;

二. 填空题(共1题,40分) 5. 现欲实现一个图像浏览系统,要求该系统能够显示BMP、JPEG和GIF三种格式的文件,并且能够在Windows和Linux两种操作系统上运行。系统首先将BMP、JPEG和GIF三种格式的文件解析为像素矩阵,然后将像素矩阵显示在屏幕上。系统需具有较好的扩展性以支持新的文件格式和操作系统。为满足上述需求并减少所需生成的子类数目,采用桥接设计模式进行设计所得类图如图1所示。 image.png 采用该设计模式的原因在于:系统解析BMP、JPEG与GIF文件的代码仅与文件格式相关,而在屏幕上显示像素矩阵的代码则仅与操作系统相关。

【Java代码】


class Matrix {  //各种格式的文件最终都被转化为像素矩阵

    //此处代码省略

}

interface ImageImp {

    public void doPaint(Matrix m);  //显示像素矩阵m

}



class WinImp implements ImageImp {

    public void doPaint(Matrix m) {/*调用Windows系统的绘制函数绘制像素矩阵*/}

}



class LinuxImp implements ImageImp {

    public void doPaint(Matrix m) {/*调用Linux系统的绘制函数绘制像素矩阵*/}

}



abstract class Image {

     protected      (1)        imp; 

    public void setImp(ImageImp imp) {

            (2)       = imp; }

    public abstract void parseFile(String fileName);

   

}



class BMP extends Image {

    public void parseFile(String fileName) {

        //此处解析BMP文件并获得一个像素矩阵对象m

                   (3)            ;//显示像素矩阵m

    }

}



class GIF extends Image {

    //此处代码省略

}



class JPEG extends Image {

    //此处代码省略

}



public class Main{

    public static void main(String[] args)

    {

        //在Windows操作系统上查看demo.bmp图像文件

        Image image1 =      (4)      ;

        ImageImp imageImp1 =       (5)       ;

                   (6)            ;

        image1.parseFile("demo.bmp");

    }

}

现假设该系统需要支持10种格式的图像文件和5种操作系统,不考虑类Matrix和类Main,若采用桥接模式则至少需要设计 (7) 个类。若不采用桥接模式,而是采用多层继承方案(图片格式为父类,操作系统为子类)则要设计 (8) 个类。

正确答案: (1) ImageImp (2) this.imp (3) imp.doPaint(m) (4) new BMP() (5) new WinImp() (6) image1.setImp(imageImp1) (7) 17 (8) 61

三. 简答题(共1题) 6. 空客(Airbus)、波音(Boeing)、麦道(McDonnell-Douglas)都是飞机制造商,他们都可以生产载客飞机(PassengerPlane)、载货飞机(CargoPlane),请使用桥接模式来描述飞机制造商和他们生产的飞机。 1、画出UML类图(20分); image.png 2、使用Java语言编写代码(20分)。

public class Main {
   public static void main(String[] args) {
       Plane plane = (Plane) XMLUtilPlane.getBean("plane");
       PlaneMaker planeMaker = (PlaneMaker)XMLUtilPlane.getBean("planeMaker");
       planeMaker.setPlane(plane);
       planeMaker.makePlane();
   }
}



import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.*;
public class XMLUtilPlane
{
//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象
  public static Object getBean(String args)
  {
     try
     {
        //创建文档对象
        DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = dFactory.newDocumentBuilder();
        Document doc;                    
        doc = builder.parse(new File("homework-07/BridgeConfigPen.xml"));
        NodeList nl=null;
        Node classNode=null;
        String cName=null;
        nl = doc.getElementsByTagName("className");
       
        if(args.equals("plane"))
        {
           //获取包含类名的文本节点
              classNode=nl.item(0).getFirstChild();
             
        }
        else if(args.equals("planeMaker"))
        {
           //获取包含类名的文本节点
              classNode=nl.item(1).getFirstChild();
        }
       
           cName=classNode.getNodeValue();
           //通过类名生成实例对象并将其返回
           Class c=Class.forName(cName);
         Object obj=c.newInstance();
           return obj;      
          }  
              catch(Exception e)
              {
                 e.printStackTrace();
                 return null;
              }
     }
}

===========================================

public abstract class Plane {
   public abstract void showName(String company,Plane plane);
}

public class CargoPlane extends Plane{
   @Override
   public void showName(String company, Plane plane) {
       System.out.println(company + " make"+ " CargoPlane");
   }
}

public class PassengerPlane extends Plane{
   @Override
   public void showName(String company, Plane plane) {
       System.out.println(company + " make"+ " PassengerPlane");
   }
}

===========================================

public abstract class PlaneMaker {
   public Plane plane;
   public void setPlane(Plane plane) {
       this.plane=plane;
   }
   public abstract void makePlane();
}

public class Airbus extends PlaneMaker{
   @Override
   public void makePlane() {
       String company="Airbus company";
       this.plane.showName(company,this.plane);
   }
}

public class Boeing extends PlaneMaker{
   @Override
   public void makePlane() {
       String company="Boeing company";
       this.plane.showName(company,plane);
   }
}

public class McDonnellDouglas extends PlaneMaker{
   @Override
   public void makePlane() {
       String company="McDonnellDouglas company";
       this.plane.showName(company,plane);
   }
}

运行效果图 image.png

标签:桥接,void,软件体系结构,public,plane,设计模式,company,class
From: https://blog.51cto.com/histry/9099452

相关文章

  • 软件体系结构与设计模式之组合模式
    一.单选题(共4题)(单选题)一个树形文件系统体现了()模式。A.Decorator(装饰)B.Composite(组合)C.Bridge(桥接)D.Proxy(代理)我的答案:B:Composite(组合);(单选题)以下关于组合模式的叙述错误的是()。A.组合模式对叶子对象和组合对象的使用具有一致性B.组合模式可......
  • 软件体系结构与设计模式之装饰模式和外观模式
    一.单选题(共4题)(单选题)某公司欲开发一个图形控件库,要求可以在该图形控件库中方便地增加新的控件,而且可以动态地改变控件的外观或给控件增加新的行为,如可以为控件增加复杂的立体边框、增加控件的鼠标拖拽行为等。针对上述需求,使用()模式来进行设计最合适。A.适配器(Adap......
  • 软件体系结构与设计模式之享元模式和代理模式
    一.单选题(共6题)(单选题)在享元模式中,外部状态是指()。A.享元对象可共享的所有状态B.享元对象可共享的部分状态C.由享元对象自己保存和维护的状态D.由客户端保存和维护的状态我的答案:D:由客户端保存和维护的状态;正确答案:D:由客户端保存和维护的状态;(单选......
  • 软件设计模式与体系结构之运算器的设计
    实验目的与要求 深刻理解面向对象编程思想与设计原则,熟悉Java语言中类的声明、属性的声明、方法的定义、对象的创建与使用等语法知识,能够根据具体问题完成对象的抽象、类的定义及程序的编写,并在程序中使用适当的设计原则,初步体验面向对象编程的优点。实验内容 使用Java语言编写一......
  • 软件设计模式与体系结构之简单工厂模式和工厂方法模式
    一、实验目的掌握简单工厂模式和工厂方法模式的概念,能够灵活使用简单工厂模式和工厂方法模式解决相关问题。二、实验内容场景描述一:在某OA系统中,系统根据对比用户在登录时输入的账号和密码以及在数据库中存储的账号和密码是否一致来进行身份验证,如果验证通过,则取出存储在数据......
  • 软件设计模式与体系结构之抽象工厂模式与建造者模式
    实验三:抽象工厂模式与建造者模式一、实验目的掌握抽象工厂模式和建造者模式的概念,能够灵活使用抽象工厂模式和建造者模式解决相关问题。二、实验内容场景描述一:某手机游戏软件公司欲推出一款新的游戏软件,该软件能够支持Symbian和Android等多个主流的手机操作系统平台,针对不同......
  • 【设计模式】单例模式——反序列化破坏单例模式的情景
    一个单例对象创建好之后,有时候需要将对象序列化然后进行数据持久化,下次使用的时候通过反序列化转化为内存对象。反序列化后的对象会重新分配内存,会破坏单例模式。首先看支持序列化的单例类的代码://实现Serializable即可实现序列化和反序列化publicclassSingletonimplementsSe......
  • 设计模式--单例模式
    设计模式是软件工程中共同的问题的解决方案,这些方案经过了验证和总结,能够在不同的情境中提供最佳的解决途径。设计模式主要分为三类:创建型模式、结构型模式和行为型模式。以下是这三类模式中的23个经典设计模式的列表:创建型模式(CreationalPatterns):创建型模式涉及对象的初始化和......
  • Java设计模式-策略模式
    简介策略模式是指有一定行动内容的相对稳定的策略名称,策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法策略模式:定义了一组算法(业务规则)封装了每个算法这族的算法可互换代替组成抽象策略角色:策略类,通常由一个接口或者抽象类实现具体策略角......
  • 【设计模式】单例模式——clone()方法破坏单例模式的情景
    Java的对象不仅可以new关键字产生,也可以利用clone()方法产生,或者利用反射和反序列化产生。用DCL或静态内部类实现单例模式都是利用private修饰构造函数来解决new关键字产生多个对象的问题的,但单例模式仍然可以被clone()方法、反射和反序列化破坏。如下代码所示,让单例类实现Cloneabl......