其他分享
首页 > 其他分享> > 设计模式-适配器模式

设计模式-适配器模式

作者:互联网

设计模式-适配器模式

1 介绍

适配器模式是将某个类的接口转化成客户起到的接口的表现形式,目的是消除接口不匹配所造成类的兼容性问题。适配器模式分为三类:类适配器模式、对象适配器模式、接口适配器模式。

2 类适配器模式

思想:有一个source类,拥有同一个方法Method1,带适配,目标接口是targetSource,通过Adapter类,将source扩展到targetSource中。

2.1 UML类图

在这里插入图片描述

2.2 代码

  1. 目标适配器类class Source
public class Source {

    public void Method1() {
        System.out.println("Source.Method1()");
    }
}
  1. interface TargetSource
public interface TargetSource {

    void Method1();

    void Method2();
}
  1. 适配器 Adapter
public class Adapter extends Source implements TargetSource {

    @Override
    public void Method2() {
        System.out.println("Adapter.Method2()");
    }
}
  1. Client
public class Client {

    public static void main(String[] args) {
        TargetSource adapter = new Adapter();
        adapter.Method1();
        adapter.Method2();
    }
}

输出

Source.Method1()
Adapter.Method2()

3 对象适配器模式

思想:与类适配器差异不大,主要的差别在于,对象适配器模式不在继承Source,而是直接持有Source示例,以达到解决兼容性的问题。

3.1 UML类图

在这里插入图片描述

3.2 代码

  1. class Adapter
public class Adapter implements TargetSource {

    private Source source;

    public Adapter(Source source) {
        this.source = source;
    }

    public void setSource(Source source) {
        this.source = source;
    }

    @Override
    public void Method1() {
        this.source.Method1();
    }

    @Override
    public void Method2() {
        System.out.println("Adapter.Method2()");
    }
}
  1. client
public class Client {

    public static void main(String[] args) {
        TargetSource adapter = new Adapter(new Source());
        adapter.Method1();
        adapter.Method2();
    }
}

输出

Source.Method1()
Adapter.Method2()

4 接口适配器模式

4.1 介绍

接口适配器:在开发过程中,一个接口中有多个方法,当我们写该接口的实现类,必须实现该接口的所有方法,并不是所有的方法都是我们需要的,有时只需要一些。为了解决这个问题,引入接口的适配器模式,借助一个抽象类,该抽象类实现了该接口的所有方法,我们不和原始的接口打交道,只和抽象类打交道。所以我们只继承该抽象类,重写所需要的方法。

4.2 UML类图

在这里插入图片描述

4.3 代码

  1. 接口 interface TargetSource
public interface TargetSource {

    void Method1();

    void Method2();
}
  1. 抽象类 TargetAdapter
public abstract class TargetAdapter implements TargetSource {

    @Override
    public void Method1() {
        System.out.println("TargetAdapter.Method1");
    }

    @Override
    public void Method2() {
        System.out.println("TargetAdapter.Method2");
    }

}
  1. 适配器 class SourceAdapter1
public class SourceAdapter1 extends TargetAdapter {

    @Override
    public void Method1() {
        System.out.println("SourceAdapter1.Method1");
    }
}
  1. 适配器 class SourceAdapter2
public class SourceAdapter2 extends TargetAdapter {
    @Override
    public void Method2() {
        System.out.println("SourceAdapter2.Method2");
    }
}
  1. clien
public class Client {

    public static void main(String[] args) {
        TargetAdapter targetAdapter1 = new SourceAdapter1();
        TargetAdapter targetAdapter2 = new SourceAdapter2();
        targetAdapter1.Method1();
        targetAdapter1.Method2();
        targetAdapter2.Method1();
        targetAdapter2.Method2();
    }
}

输出

SourceAdapter1.Method1
TargetAdapter.Method2
TargetAdapter.Method1
SourceAdapter2.Method2

4.4 总结

适配器在开发过程当中,适用的场景很多。SpringBoot源码中,将工厂模式发挥到极点,其中也将适配器模式使用的淋漓尽致。

标签:Method2,Method1,适配器,模式,class,void,设计模式,public
来源: https://blog.csdn.net/qq_27242695/article/details/109508805