首页 > 其他分享 >软件体系结构与设计模式之适配器模式

软件体系结构与设计模式之适配器模式

时间:2024-01-04 13:32:59浏览次数:40  
标签:sound Adapter 适配 适配器 软件体系结构 public 设计模式 void

一. 单选题(共4题,8分)

  1. (单选题, 2分) 当想使用一个已经存在的类,但其接口不符合需求时,可以采用( )设计模式将该类的接口转换成我们希望的接口。 A. 命令 (Command) B. 适配器 (Adapter) C. 装饰 (Decorator) D. 享元 (Flyweight) 我的答案: B:适配器 (Adapter);正确答案: B:适配器 (Adapter);

  2. (单选题, 2分)以下关于适配器模式的叙述错误的是( )。 A. 适配器模式将一个接口转换成客户希望的另一个接口,使得原本接口不兼容的那些类可以一起工作 B. 在类适配器中,Adapter和Adaptee是继承关系,而在对象适配器中,Adapter和Adaptee是关联关系 C. 类适配器比对象适配器更加灵活,在Java、C#等语言中可以通过类适配器一次适配多个适配者类 D. 适配器可以在不修改原来的适配者接口Adaptee的情况下将一个类的接口和另一个类的接口匹配起来 我的答案: C:类适配器比对象适配器更加灵活,在Java、C#等语言中可以通过类适配器一次适配多个适配者类;正确答案: C:类适配器比对象适配器更加灵活,在Java、C#等语言中可以通过类适配器一次适配多个适配者类;

  3. (单选题, 2分)现需要开发一个文件转换软件,将文件由一种格式转换为另一种格式,如将XML文件转换为PDF文件,将DOC文件转换为TXT文件,有些文件格式转换代码已经存在,为了将已有的代码应用于新软件,而不需要修改软件的整体结构,可以使用( )设计模式进行系统设计。 A. 组合 (Composite) B. 适配器 (Adapter) C. 外观 (Facade) D. 桥接 (Bridge) 我的答案: B:适配器 (Adapter);正确答案: B:适配器 (Adapter);

  4. (单选题, 2分)在对象适配器中,适配器类(Adapter)和适配者类(Adaptee)之间的关系是( )。 A. 关联关系 B. 依赖关系 C. 继承关系 D. 实现关系 我的答案: A:关联关系;正确答案: A:关联关系;

二. 多选题 5. (多选题)以下说法正确的是( )。 A. 在类适配器中,目标类只能是接口,适配器类是适配者类的子类 B. 在类适配器中,适配器可以适配多个适配者 C. 在对象适配器中,适配器可以适配多个适配者 D. 适配器模式的优点主要是将目标类和适配者类解耦 我的答案: ACD:在类适配器中,目标类只能是接口,适配器类是适配者类的子类; 在对象适配器中,适配器可以适配多个适配者; 适配器模式的优点主要是将目标类和适配者类解耦;正确答案: ACD:在类适配器中,目标类只能是接口,适配器类是适配者类的子类; 在对象适配器中,适配器可以适配多个适配者; 适配器模式的优点主要是将目标类和适配者类解耦;

  1. (多选题) ( )不是适配器模式的应用实例。 A. 操作系统中的树形目录结构 B. Windows中的应用程序快捷方式 C. Java事件处理中的监听器接口 D. JDBC中的数据库驱动程序 我的答案: ABC:操作系统中的树形目录结构; Windows中的应用程序快捷方式; Java事件处理中的监听器接口;正确答案: ABC:操作系统中的树形目录结构; Windows中的应用程序快捷方式; Java事件处理中的监听器接口;

三. 填空题(共1题) 7.某公司欲开发一款儿童玩具汽车,为了更好地吸引小朋友的注意力,该玩具汽车在移动过程中伴随着灯光闪烁和声音提示,在该公司以往的产品中已经实现了控制灯光闪烁和声音提示的程序,为了重用先前的代码并且使得汽车控制软件具有更好的灵活性和扩展性,使用适配器模式设计该系统,所得类图如图1所示。 image.png 在图1中,CarController类是汽车控制器,它包括三个方法用于控制汽车的行为,其中move()用于控制汽车的移动,sound()用于控制汽车的声音,light()用于控制汽车灯光的闪烁, sound()和light()是抽象方法。Sound类是抽象声音类,其方法phonate()用于实现声音提示,在其子类ConcreteSound中实现了该方法;Lamp类是灯光类,其方法twinkle()用于实现灯光闪烁,在其子类ConcreteLamp中实现了该方法。CarAdapter充当适配器,它通过分别调用Sound类的phonate()方法和Lamp类的twinkle()方法实现声音播放和灯光闪烁。


【Java代码】

abstract class Sound  //抽象声音类

{  public abstract void phonate();  }



class ConcreteSound extends Sound  //具体声音类

{

 public void phonate()

 {  System.out.println("声音播放!");  } 

}



abstract class Lamp  //抽象灯光类

{  public abstract void twinkle();  }



class ConcreteLamp extends Lamp  //具体灯光类

{

 public void twinkle()

 {  System.out.println("灯光闪烁!");  } 

}



           (1)            CarController  //汽车控制器

{

 public void move()

 {  System.out.println("汽车移动!");  }

 public abstract void sound();

 public abstract void light();

}



class CarAdapter            (2)             //汽车适配器

{

 private Sound sound;

 private Lamp lamp;

 

 public CarAdapter(Sound sound,Lamp lamp)

 {

            (3)            ;

            (4)            ;

 }

 

 public void sound()

 {

            (5)            ;  //声音播放

 }

 

 public void light()

 {

            (6)            ;  //灯光闪烁

 }

}



class Client

{

 public static void main(String args[])

 {

 Sound sound;

 Lamp lamp;

 CarController car;

 

 sound = new ConcreteSound();

 lamp = new ConcreteLamp();

 car =            (7)            ;

 

 car.move();

 car.sound();

 car.light();

 }

}

在本实例中,使用了 (8) (填写类适配器或对象适配器)模式

正确答案: (1) abstract class (2) extends CarController (3) this.sound = sound (4) this.lamp = lamp (5) sound.phonate() (6) lamp.twinkle() (7) new CarAdapter(sound, lamp) (8) 对象适配器

四. 简答题(共1题) 8. 实现一个双向适配器实例,使得猫(Cat)可以学狗(Dog)叫,狗可以学猫抓老鼠。绘制相应类图并使用代码编程模拟。 1、画出UML类图

image.png

2、使用Java语言编程实现

public interface Cat {

   void cry();
   void catchMouse();
}

public class ConcreteCat implements Cat{
   @Override
   public void cry() {
       System.out.println("猫喵喵叫");
   }
   @Override
   public void catchMouse() {
       System.out.println("猫抓老鼠");
   }
}
public interface Dog {
   void wang();
   void action();
}

public class ConcreteDog implements Dog{
   @Override
   public void wang() {
       System.out.println("狗汪汪叫");
   }
   @Override
   public void action() {
       System.out.println("狗抓老鼠");
   }
}

public class Adapter implements Dog,Cat{
   private Cat cat;
   private Dog dog;

   public Adapter(Cat cat, Dog dog) {
       this.cat = cat;
       this.dog = dog;
   }

   @Override
   public void cry()
   {
       System.out.print( "猫学");
       dog.wang();
   }

   @Override
   public void catchMouse() {
       cat.catchMouse();
   }

   @Override
   public void wang() {
       dog.wang();
   }

   @Override
   public void action()
   {
       System.out.print( "狗学");
       cat.catchMouse();
   }
}

public class Test {
   public static void main(String args[])
   {
       Cat cat = new ConcreteCat();
       Dog dog = new ConcreteDog();
       Adapter Animal = new Adapter(cat,dog);
       cat = (Cat) Animal;
       cat.cry();
       dog = (Dog) Animal;
       dog.action();
   }
}

效果展示 image.png

标签:sound,Adapter,适配,适配器,软件体系结构,public,设计模式,void
From: https://blog.51cto.com/histry/9099358

相关文章

  • 软件体系结构与设计模式之桥接模式
    一.单选题1.桥接设计模式将抽象部分与它的实现部分相分离,使它们都可以独立地变化。下图为该设计模式的类图,其中,()用于定义实现部分的接口。A.AbstractionB.ConcreteImplementorAC.ConcreteImplementorBD.Implementor我的答案:D:Implementor;正确答案:D:Implementor......
  • 软件体系结构与设计模式之组合模式
    一.单选题(共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设计模式-策略模式
    简介策略模式是指有一定行动内容的相对稳定的策略名称,策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法策略模式:定义了一组算法(业务规则)封装了每个算法这族的算法可互换代替组成抽象策略角色:策略类,通常由一个接口或者抽象类实现具体策略角......