设计模式-适配器模式

一、定义

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

角色:

Target目标角色:该角色定义把其他类转换为何种接口,也就是我们期望的接口。

Adaptee源角色:想要转换为目标角色的角色。已经存在的运行良好的类,经过适配器角色包装成为目标角色。

Adapter适配器角色:核心角色,其他两个角色都是已经存在的角色,把源角色转换为目标角色,通过继承或者类关联的方式。

二、类型

 接口型

三、适用场景

 有动机修改一个已经投产中的接口,在设计阶段不应该考虑适配器模式。

四、优点

  • 让两个没有任何关系的类在一起运行,只要适配器这个角色能搞定即可。
  • 我们访问目标角色,具体实现都委托给了源角色,而这些对高层模块是透明的,也是他不需要关心的。
  • 提高类的复用度。
  • 灵活性好,不想要了直接删除。

五、缺点

 增加系统复杂性

六、类图

 类适配器:

 

对象适配器:

 

七、代码实现

Target:

package com.wms.structural.adapter.classadapter;

public interface Target {
    void method();
}

ConcreateTarget:

package com.wms.structural.adapter.classadapter;

public class ConcreateTarget implements Target {
    public void method() {
        System.out.println("concreateTarget method");
    }
}

Adaptee(可以定义为接口):

package com.wms.structural.adapter.classadapter;

public class Adaptee {
    public void adapteeMethod() {
        System.out.println("adaptee method");
    }
}

类适配器:

package com.wms.structural.adapter.classadapter;

public class ClassAdapter extends Adaptee implements Target {
    public void method() {
        this.adapteeMethod();
    }
}

对象适配器:

package com.wms.structural.adapter;

public class ObjectAdapter implements Target {

    private Adaptee adaptee;

    public ObjectAdapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    public void method() {
        this.adaptee.adapteeMethod();
    }
}
原文地址:https://www.cnblogs.com/wangmingshun/p/10252716.html