适配器模式

1、使用场景

JDBC驱动程序:不同的数据库提供商实现了不同的JDBC驱动接口,使用适配器模式可以将这些不同的接口适配为标准的JDBC接口,提高应用程序的可移植性。

2、原理

第一种方式是关联使用:把被适配的对象放到适配器里面,通过访问适配器的方法间接调用被适配的对象

第二种方式是继承,成为子类,通过访问子类间接访问原有类

3、关联使用的案例

4、继承方式的案例

  • 翻译类‘Translator’ ,里面有‘TranslateInZh’和‘TranslateInEn’方法。(对象、接口适配器模式也要用)
/**
 * @author Created by njy on 2023/6/8
 * 源对象(source):充当翻译
 */
public class Translator {
 
    //英——》汉
    public void translateInZh(String words){
        if("hello world!".equals(words)){
            System.out.println("翻译成中文:”你好世界!“");
        }
    }
 
    //汉——》英
    public void translateInEn(String words){
        if("你好世界!".equals(words)){
            System.out.println("Translate in English:”hello world!“");
        }
    }
}
  • 适配器接口
/**
 * @author Created by njy on 2023/6/8
 * 目标接口(target)
 */
public interface Target {
 
    /**
     * 翻译
     * @param source 母语
     * @param target 要翻译成的语种
     * @param words 内容
     */
    void translate(String source,String target,String words);
}

适配器类继承原有类

/**
 * @author Created by njy on 2023/6/11
 * 类适配器:通过多重继承目标接口和被适配者类方式来实现适配
 */
public class ClassAdapter extends Translator implements Target {
 
    @Override
    public void translate(String source, String target, String words) {
        if("中文".equals(source) && "英文".equals(target)) {
            //汉--》英
            this.translateInEn(words);
        } else {
            //英--》汉
            this.translateInZh(words);
        }
    }
}

测试类

/**
 * @author Created by njy on 2023/6/8
 */
@SpringBootTest
public class TestAdapter {
 
    //类适配器
    @Test
    void classAdapter(){
        //创建一个类适配器对象
        ClassAdapter adapter=new ClassAdapter();
        adapter.translate("中文", "英文", "你好世界!");
        adapter.translate("英语","中文","hello world!");
    }
}

适配器模式_第1张图片 

 

你可能感兴趣的:(设计模式,适配器模式,java,数据库)