对象适配器设计模式

导读:本篇文章讲解 对象适配器设计模式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

对象适配器设计模式——我的理解

当我们要访问的接口A中没有我们想要的方法 ,却在另一个接口B中发现了合适的方法,我们又不能改变访问接口A,在这种情况下,我们可以定义一个适配器p来进行中转,这个适配器p要实现我们访问的接口A,这样我们就能继续访问当前接口A中的方法(虽然它目前不是我们的菜),然后在适配器P中定义私有变量C(对象)(B接口指向变量名),再定义一个带参数的构造器用来为对象C赋值,再在A接口的方法实现中使用对象C调用其来源于B接口的方法

  • 简单点理解就是平常所见的转接头,转换器之类的存在。就是我一定要用A插头,A插头却不匹配B插口,于是,搞一个转接头来,依然先通过A插头供电,经过转接头,适配一个B插头,这样就解决了冲突。

对象适配器采用的是对象组合(适配器包装被适配对象)的关系,不是使用继承关系,被适配的类的API转换成为目标类的API。


结构和图解

图解

tGMqJS.png

结构

角色 作用
Target(目标抽象类) 目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。
Adaptee(适配者类) 适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码。
Adapter(适配器类) 适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系。

实例源码

  • 实例
    我手中有个Micro USB插头的U盘,但是手机上只有Type-C插头的接口,怎么办呢?弄个转换器,将Micro USB插头转换成为Type-C插头就可以使用了。

接口Micro USB(目标抽象):描述Micro USB接口格式
接口Type-C(适配者抽象):描述Type-C接口格式
类Usber(具体适配者):是接口Type-C的实现类,是具体的Type-C接口格式
Adapter(适配器):用于将Micro USB接口格式转换成为Type-C接口格式

  1. MicroUSB接口:MicroUSB
public interface MicroUSB {
    void useMicroUSB();
}
  1. TypeC接口:TypeC
public interface TypeC {
    void useTypeC();
}
  1. TypeC接口实现类:TypeCUsber
public class TypeCUsber implements TypeC {

    @Override
    public void useTypeC() {
        System.out.println("TypeC插头");
    }

}
  1. 适配器:Adapter
public class Adapter implements MicroUSB {

    private TypeC typeC;

    public Adapter(TypeC typeC){
        this.TypeC = typeC;
    }

    @Override
    public void useMicroUSB() {
        typeC.useTypeC();
    }

}
  1. 测试类:Clienter
public class Clienter {

    public static void main(String[] args) {

        // 我只有一个TypeC插头的U盘
        // 但是,手机的插口是Micro USB的
        TypeC typeC = new TypeC();

        // 使用适配器,将TypeC插头转换为Micro USB插头
        MicroUSB p = new Adapter(typeC);

        // 使用转换后的Micro USB插头
        p.useMicroUSB();
    }

}

优缺点

  • 优点

一个适配器可以把多种不同的源适配到同一个目标。换言之,同一个适配器可以把源类和它的子类都适配到目标接口。
符合设计原则:多用合成/聚合、少用继承,从而减少类之间的耦合.

  • 缺点

需要额外的引用来间接得到Adaptee。


适用场景

(1)想要使用一个已经存在的类,但是它却不符合现有的接口规范,导致无法直接去访问,这时创建一个适配器就能间接去访问这个类中的方法。

(2)我们有一个类,想将其设计为可重用的类(可被多处访问),我们可以创建适配器来将这个类来适配其他没有提供合适接口的类。


想了解更多,欢迎前来关注

如果觉得不错,来关注吧

tYkNnK.jpg

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/69798.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!