设计模式 —— 适配器模式

目录

  • 概述
  • UML
  • 实现
  • 优缺点

概述:

适配器模式是 结构型 设计模式的一种。类似于设计一个中间接口,使得两边可以适配使用

定义:将一个接口转化为客户端所期待的接口,从而使两个接口不兼容的类可以在一起工作

适用场景:存在现成的类可以使用,但是我们的系统不兼容它提供的接口,且我们无法对其进行修改;多个团队独立开发系统的各个部分,但是先无法确定接口

UML:

image-20230227173420612

  • Target:客户端使用的目标接口
    • operation方法:客户端使用的方法
  • Adaptee:不兼容的类
    • operation方法:类方法
  • Adapter:适配器类
    • debug方法:自己设定的,使用于接口转换的方法

实现:

实现背景:想要调出某学校某宿舍的全部学生信息,但是学校管理系统大更新了依次,现在无法调用以前的查询接口。

  1. 确定目标接口
// 旧查询接口,输入宿舍楼,宿舍编号返回信息(简单处理就不返回详细信息了)
public interface SelectStu{
    void selectMessage(int HouseNum,int Num);
}
  1. 第二,三方接口实现
// 输入宿舍楼名称,宿舍号返回信息
public interface NowSelectSys{
    void fun(int HouseNum,String HouseName);
}
// 实现类
public class NowSelectSysImpl implements NowSelectSys{
    public void fun(int HouseNum,String HouseName){
        System.out.println("返回了"+HouseNum+HouseName+"宿舍的信息");
    }
}
  1. 构建适配器
public class SelectAdapter implements SelectStu {
    private NowSelectSys nowSelectSys;
     // 数字的获取可以是其他程序或者一些方法,目的在将String变为int符合接口
    private int HouseNum = 107;
    
    public SelectAdapter(NowSelectSys nowSelectSys){
        this.nowSelectSys = nowSelectSys;
    }
    
    public void selectMessage(String HouseName,int HouseNum){
        nowSelectSys.fun(HouseNum,HouseName);
    }
}
  1. 客户端调用接口
SelectAdapterpublic class AdapterClient{
    public void SelectStudent(){
        SelectStu selectStu = new SelectAdapter(new NowSelectSysImpl);
        selectStu.selectMessage("会泽大楼","一楼七号")
    }
}

优缺点:

优点:增强了程序的可扩展性,减少对接口的修改

缺点:需要多管理一层Adapter