博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结构型 之 适配器模式
阅读量:6289 次
发布时间:2019-06-22

本文共 2756 字,大约阅读时间需要 9 分钟。

定义

把一个类的接口变换成客户端所期待的另一种接口,从而是原本因接口不匹配而无法在一起工作的两个类能够一起工作。

分类

类适配器、对象适配器、接口适配器。

应用场景

实际项目开发过程中,每个人都会各自写自己的业务服务类,如ExcelImportServiceImpl、CaculateServiceImpl、ExcelExportServiceImpl。各个业务服务类都是独自写各自的服务方法,这些业务服务类都有各自的接口。现在这些业务服务类要被多线程统一调用,线程服务类接口是IThreadService,如何通过接口doBusiness()方法实现统一调用各个业务服务类。

解决方案:由于各个业务服务类的方法都是不规则的,因此需要为各个服务类分别定义一个适配器类Adapter,适配器继承业务服务类并且实现线程服务类,通过调用适配器类实现间接的调用各个业务服务类。

1.类适配器

当客户在接口中定义了他期望的行为时,我们就可以应用适配器模式,提供一个实现该接口的类,并且扩展已有的类,通过创建子类来实现适配。

目标类Target

/** * 业务服务类接口,在适配器模式中也称为目标类 */public interface IExcelImportService {    RspDto  execute();} public class ExcelImportServiceImpl implements IExcelImportService {    public RspDto execute() {        System.out.println("导入Excel文件");        return null;    }

客户端Client接口,也是调用者

public interface IThreadService {    RspDto  doBusiness();}

适配器

public class ExcelImportServiceAdapter extends ExcelImportServiceImpl implements IThreadService {   @Override    public RspDto doBusiness() {       execute();    }}

测试代码

public class Test  {    public static void main(String[] args){        IThreadService service = new ExcelImportServiceAdapter();        service.doBusiness();    }}

2.对象适配器

/** * 业务服务类接口,在适配器模式中也称为目标类 */public interface IExcelImportService {    RspDto  execute();} public class ExcelImportServiceImpl implements IExcelImportService {    public RspDto execute() {        System.out.println("导入Excel文件");        return null;    }} public interface IThreadService {    RspDto  doBusiness();} /** * Adapter中添加一个属性保存服务类对象 */public class ExcelImportServiceAdapter implements IThreadService {private IExcelImportService excelImportService ;public ExcelImportServiceAdapter(IExcelImportService excelImportService){       this.excelImportService = excelImportService;}   @Override    public RspDto doBusiness() {      excelImportService.execute();    }} //测试public class Test  {    public static void main(String[] args){        ExcelImportServiceImpl excelImportService = new ExcelImportServiceImpl();        IThreadService service = new ExcelImportServiceAdapter(excelImportService );        service.doBusiness();    }}

3.接口适配器

1 public interface A  { 2    void a(); 3    void b(); 4    void c(); 5    void d(); 6 } 7   8 public class AbstractA implements  A{ 9     @Override10     public void a() {}11     @Override12     public void b() {}13     @Override14     public void c() {}15     @Override16     public void d() {}17 }18  19 public class AdapterB extends  AbstractA{20     @Override21     public void a() {22         System.out.println("AdapterB 只需要关注a()方法");23     }24 }25  26 public class AdapterC extends  AbstractA{27     @Override28     public void b() {29         System.out.println("AdapterC 只需要关注a()方法");30     }31 }

 

转载于:https://www.cnblogs.com/walixiansheng/p/9562653.html

你可能感兴趣的文章