设计模式07 适配器模式

左图是:对象结构型适配器模式;右图是:类结构型适配器模式。常用的是第一种方式。

对象结构型适配器模式与代理模式的UML类图比较接近,对比的看一下:

左图是:对象结构型适配器模式;右图是:代理模式。

适配器模式(Adapter)定义:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。

适配器模式的优点有:

1、客户端通过适配器可以透明地调用目标接口。

2、复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。

3、将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。

目标对象(被适配的对象):

1 public class Adaptee {
2     public void specificRequest() {
3         System.out.println("原组件执行");
4     }
5 }

对象结构适配器:

 1 public interface Target {
 2     public void request();
 3 }
 4 
 5 public class Adapter implements Target {
 6     private Adaptee adaptee;
 7 
 8     public Adapter(Adaptee adaptee) {
 9         this.adaptee = adaptee;
10     }
11 
12     @Override
13     public void request() {
14         // TODO Auto-generated method stub
15         adaptee.specificRequest();
16     }
17 }

类结构适配器:

1 public class ClassAdapter extends Adaptee implements Target {
2     @Override
3     public void request() {
4         // TODO Auto-generated method stub
5         specificRequest();
6     }
7 }

调用方式:

 1 public class Client {
 2     public static void main(String[] args) {
 3         //类适配器
 4         Target target = new ClassAdapter();
 5         target.request();
 6         
 7         System.out.println("----------------");
 8         //被调用的目标对象
 9         Adaptee adaptee = new Adaptee();
10         
11         //适配器,左侧和右侧分别是两个“螺丝扣”
12         Target adapter = new Adapter(adaptee);
13         
14         //信息通过adapter传输
15         adapter.request();
16     }
17 }

执行结果:

通过调用适配器(Adapter)的request()方法,完成了对被适配对象(Adaptee)的specificRequest()方法的执行。

原文地址:https://www.cnblogs.com/asenyang/p/12111037.html