java适配器模式

简介: 适配器继承或依赖已有的对象,实现想要的目标接口。

java适配器模式


前言

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。

例子: 原本系统只支持导出html报表文档,突然增加了需求,需要导出doc和xls文档。
这时可以使用适配器,接入原有的接口中,是原有的接口也能创建出doc和xls文档。
适配器负责产出doc或者xls


1,创建报表顶层接口

定义报表生成接口

public interface ReportDownLoad {
    void creatReport(String type,String name);
}

2,更多其他报表接口

public interface EnyReportDownLoad {
    //创建doc
    public void createDoc(String name);
    //创建xls
    public void createXls(String name);
}

3,实现其他报表接口

doc的实现

public class DOCReportDownLoad implements EnyReportDownLoad{
    @Override
    public void createDoc(String name) {
        System.out.println("下载报表文件类型:"+"doc" + "      "+name+"."+"doc");
    }
    @Override
    public void createXls(String name) {

    }
}

xls的实现

public class EXCELReportDownLoad implements EnyReportDownLoad{
    @Override
    public void createDoc(String name) {
    }
    @Override
    public void createXls(String name) {
        System.out.println("下载报表文件类型:"+"xls" + "      "+name+"."+"xls");
    }
}

4,创建适配器,适配器需实现报表顶层接口

public class ReportAdapter implements ReportDownLoad{

    private EnyReportDownLoad report = null;
    //根据类型,返回不同的报表创建类
    public ReportAdapter(String type){
        if(type.equalsIgnoreCase("xls")){
            report = new EXCELReportDownLoad();
        }else if(type.equalsIgnoreCase("doc")){
            report = new DOCReportDownLoad();
        }
    }

    //根据类型,创建报表
    @Override
    public void creatReport(String type, String name) {
        if(type.equalsIgnoreCase("xls")){
            report.createXls(name);
        }else if(type.equalsIgnoreCase("doc")){
            report.createDoc(name);
        }
    }
}

5,更新原始接口,添加适配器

public class ReportDownLoadService implements ReportDownLoad{

    @Override
    public void creatReport(String type, String name) {
        //原有的html 报表创建
        if(type.equalsIgnoreCase("html")){
            System.out.println("下载报表文件类型:"+type + "      "+name+"."+type);
        //新增适配其他两种报表创建方式
        }else if(type.equalsIgnoreCase("doc") || type.equalsIgnoreCase("xls")){
            ReportAdapter reportAdapter = new ReportAdapter(type);
            reportAdapter.creatReport(type,name);
        }
    }
}

6,测试

 public static void main(String[] args) {
        ReportDownLoadService report = new ReportDownLoadService();
        report.creatReport("xls","我是报表1");
        report.creatReport("doc","我是报表2");
        report.creatReport("html","我是报表3");
    }

结果

下载报表文件类型:xls      我是报表1.xls
下载报表文件类型:doc      我是报表2.doc
下载报表文件类型:html      我是报表3.html

总结

主要解决: 主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,期望它有新的功能,而新环境要求的接口是现对象不能满足的。
系统需要使用现有的类,而此类的接口不符合系统的需要


适配器继承或依赖已有的对象,实现想要的目标接口。
目录
相关文章
|
4月前
|
设计模式 Java API
重构旧代码的秘诀:用设计模式 - 适配器模式(Adapter)给Java项目带来新生
【4月更文挑战第7天】适配器模式是解决接口不兼容问题的结构型设计模式,通过引入适配器类实现目标接口并持有不兼容类引用,实现旧代码与新接口的协作。适用于处理兼容性问题、整合遗留代码和集成第三方库。应用时,识别不兼容接口,创建适配器类转换方法调用,然后替换原有引用。注意保持适配器简单、使用组合和考虑扩展性。过度使用可能导致系统复杂和维护成本增加,应谨慎使用。
71 4
|
4月前
|
设计模式 Java 中间件
23种设计模式,适配器模式的概念优缺点以及JAVA代码举例
【4月更文挑战第6天】适配器模式(Adapter Pattern)是一种结构型设计模式,它的主要目标是让原本由于接口不匹配而不能一起工作的类可以一起工作。适配器模式主要有两种形式:类适配器和对象适配器。类适配器模式通过继承来实现适配,而对象适配器模式则通过组合来实现
81 4
|
4月前
Servlet使用适配器模式进行增删改查案例(IDeptService.java)
Servlet使用适配器模式进行增删改查案例(IDeptService.java)
|
4月前
Servlet使用适配器模式进行增删改查案例(EmpDaoImpl.java)
Servlet使用适配器模式进行增删改查案例(EmpDaoImpl.java)
|
4月前
Servlet使用适配器模式进行增删改查案例(DeptDaoImpl.java)
Servlet使用适配器模式进行增删改查案例(DeptDaoImpl.java)
|
4月前
Servlet使用适配器模式进行增删改查案例(IDeptDao.java和IEmpDao.java)
Servlet使用适配器模式进行增删改查案例(IDeptDao.java和IEmpDao.java)
|
4月前
Servlet使用适配器模式进行增删改查案例(IBaseDaoUtil.java)
Servlet使用适配器模式进行增删改查案例(IBaseDaoUtil.java)
|
4月前
Servlet使用适配器模式进行增删改查案例(BaseDao.java)
Servlet使用适配器模式进行增删改查案例(BaseDao.java)
|
4月前
Servlet使用适配器模式进行增删改查案例(Dept.java)
Servlet使用适配器模式进行增删改查案例(Dept.java)
|
4月前
|
设计模式 Java
【设计模式】JAVA Design Patterns——Adapter(适配器模式)
【设计模式】JAVA Design Patterns——Adapter(适配器模式)