软件设计模式之适配器模式实验

实验 软件设计模式之适配器模式实验

一、实验目的

掌握软件设计模式中的适配器模式,能够用适配器模式编写程序,解决实际问题。
二、实验内容与要求

内容:举一个现实生活中的适配器的例子,并用适配器模式对其进行模拟,程序设计语言可自由选择。
要求:需要用“文字+代码+截图”的形式对实验的主要代码和运行结果进行展示和描述。
三、实验方法

  1. 举例:配器模式是23中设计模式之一,它的主要作用是在新接口和老接口之间进行适配。它非常像我们出国旅行时带的电源转换器。我们国家的电器使用普通的扁平两项或三项插头,而去外国的话,使用的标准就不一样了,怎样解决这个问题呢?只要使用一个电源转化器就行了。
  2. 代码中有两个接口,分别为德标接口和国标接口,分别命名为DBSocketInterface和GBSocketInterface,此外还有两个实现类,分别为德国插座和中国插座,分别为DBSocket和GBSocket。为了提供两套接口之间的适配,我们提供了一个适配器,叫做SocketAdapter。除此之外,还有一个客户端,比如是我们去德国旅游时住的一家宾馆,叫Hotel,在这个德国旅馆中使用德国接口。
    德标接口:
public interface  DBSocketInterface {
    /**
     * 这个方法的名字叫做:使用两项圆头的插口供电
     */
    void powerWithTwoRound();
}
  1. 德国插座实现德标接口
/**
 * 德国插座
 */
ublic class DBSocket implements DBSocketInterface{     
    ublic void  powerWithTwoRound(){
        System.out.println("使用两项圆头的插孔供电");
    }
} 
  1. 德国旅馆是一个客户端,它里面有德标的接口,可以使用这个德标接口给手机充电:
/**
 * 德国宾馆
 */
public class  Hotel {
    //旅馆中有一个德标的插口
    private DBSocketInterface dbSocket;
    public Hotel(){}
    public Hotel(DBSocketInterface dbSocket) {
        this.dbSocket = dbSocket;
    }
    public void  setSocket (DBSocketInterface dbSocket){
        this.dbSocket = dbSocket;
    }
    //旅馆中有一个充电的功能
    public void  charge(){        
        //使用德标插口充电
        dbSocket.powerWithTwoRound();
    }
}
  1. 现在写一段代码进行测试:
public class  Test {
    public static  void  main(String[] args) {
        //初始化一个德国插座对象, 用一个德标接口引用它
        DBSocketInterface dbSoket = new DBSocket();
        //创建一个旅馆对象
        Hotel hotel = new Hotel(dbSoket);
 //在旅馆中给手机充电
        hotel.charge();
    }
}

打印出以下结果: 使用两项圆头的插孔供电
6. 上面的Hotel类,DBSocket类,DBSocketInterface接口都是不可变的(由德国的客户提供),如果我想使用这一套API,那么只能自己写代码解决。
下面是国标接口和中国插座的代码。
国标接口:

/**
 * 国标接口
 */
public interface  GBSocketInterface {
    /**
     * 这个方法的名字叫做:使用三项扁头的插口供电
     */
    void powerWithThreeFlat();
}
中国插座实现国标接口:
/**
 * 中国插座
 */
public class  GBSocket implements
GBSocketInterface{
    public void  powerWithThreeFlat() {
        System.out.println("使用三项扁头插孔供电");
    }
}

7.下面给出适配器类的实现:

public class  SocketAdapter 
        implements DBSocketInterface{   //实现旧接口
 
    //组合新接口
    private GBSocketInterface gbSocket;
     
    /**
     * 在创建适配器对象时,必须传入一个新街口的实现类
     * @param gbSocket
     */
    public SocketAdapter(GBSocketInterface gbSocket) {
        this.gbSocket = gbSocket;
    }
    /**
     * 将对就接口的调用适配到新接口
     */
    @Override
    public void  powerWithTwoRound() {
        gbSocket.powerWithThreeFlat();
    }
}

8.测试代码:

public class  TestAdapter {
    public static  void  main(String[] args) {
        GBSocketInterface gbSocket = new GBSocket();
        Hotel hotel = new Hotel();
        SocketAdapter socketAdapter = new SocketAdapter(gbSocket);
        hotel.setSocket(socketAdapter);
        hotel.charge();
    }
}

打印出以下结果:
使用两项圆头的插孔供电

四 、实验结果
测试结果1:
在这里插入图片描述

适配器测试结果:
在这里插入图片描述

适配器模式将一个类的接口转换成客户期望的另一个接口,让原本不兼容的接口可以合作无间。
这个适配器必须满足以下条件:
1,必须符合德国标准的接口,否则的话还是没办法插到德国插座中。
2,,在调用上面实现的德标接口进行充电时,提供一种机制,将这个调用转到对国标接口的调用。

这就要求:

1,适配器必须实现原有的旧的接口。
2,适配器对象中持有对新接口的引用,当调用旧接口时,将这个调用委托给实现新接口的对象来处理,也就是在适配器对象中组合一个新接口。

相关推荐
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页