设计模式-适配器模式
作者:互联网
设计模式-适配器模式
1 介绍
适配器模式是将某个类的接口转化成客户起到的接口的表现形式,目的是消除接口不匹配所造成类的兼容性问题。适配器模式分为三类:类适配器模式、对象适配器模式、接口适配器模式。
2 类适配器模式
思想:有一个source类,拥有同一个方法Method1,带适配,目标接口是targetSource,通过Adapter类,将source扩展到targetSource中。
2.1 UML类图
2.2 代码
- 目标适配器类class Source
public class Source {
public void Method1() {
System.out.println("Source.Method1()");
}
}
- interface TargetSource
public interface TargetSource {
void Method1();
void Method2();
}
- 适配器 Adapter
public class Adapter extends Source implements TargetSource {
@Override
public void Method2() {
System.out.println("Adapter.Method2()");
}
}
- 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 代码
- 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()");
}
}
- 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 代码
- 接口 interface TargetSource
public interface TargetSource {
void Method1();
void Method2();
}
- 抽象类 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");
}
}
- 适配器 class SourceAdapter1
public class SourceAdapter1 extends TargetAdapter {
@Override
public void Method1() {
System.out.println("SourceAdapter1.Method1");
}
}
- 适配器 class SourceAdapter2
public class SourceAdapter2 extends TargetAdapter {
@Override
public void Method2() {
System.out.println("SourceAdapter2.Method2");
}
}
- 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