知识点七: 适配器模式
一、概述
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。它属于23种GOF设计模式的结构型设计模式 , 它结合了两个独立接口的功能。
这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。
适配器模式的别名为包装器(Wrapper)模式,它既可以作为类结构型模式,也可以作为对象结构型模式。在适配器模式定义中所提及的接口是指广义的接口,它可以表示一个方法或者方法的集合。
二、优缺点和使用场景
1、优点
- 可以让任何两个没有关联的类一起运行。
- 提高了类的复用。
- 增加了类的透明度。
- 灵活性好。
2、缺点
- 过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。
- 由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。
3、使用场景
- 有动机地修改一个
正常运行的系统的接口
,这时应该考虑使用适配器模式。
三、模式中包含的角色和其职责
1、角色
目标抽象(Target)角色:目标抽象类定义客户所需的接口,可以是一个抽象类或接口,也可以是具体类。
适配器(Adapter)角色:它可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配。它是适配器模式的核心。
适配者(Adaptee)角色:适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类包好了客户希望的业务方法。
四、在Java中的实现
目标:我们平时用的电流都是220V的电,现在我的客户端(MainClass.java)只能用180V的电,使用适配器改变用电模式
平时用的电
Current.java
public class Current {
public void use220V(){
System.out.println("使用220V电流");
}
}
1、通过继承实现
适配器Adapter.java
/**
* @Description: 适配器类
* @Author: Ling.D.S
* @Date: Created in 2018/11/12 19:52
*/
public class Adapter extends Current {
public void use180V(){
System.out.println("使用适配器");
this.use220V();
}
}
客户端MainClass.java
/**
* @Description:
* @Author: Ling.D.S
* @Date: Created in 2018/11/12 19:49
*/
public class MainClass {
public static void main(String[] args) {
Adapter adapter = new Adapter();
adapter.use180V();
}
}
2、通过委任(组合)实现
适配器Adapter.java
/**
* @Description:
* @Author: Ling.D.S
* @Date: Created in 2018/11/12 20:05
*/
public class Adapter {
private Current current;
public Adapter(Current current) {
this.current = current;
}
public void user180V(){
System.out.println("使用适配器");
this.current.use220V();
}
}
客户端MainClass.java
/**
* @Description:
* @Author: Ling.D.S
* @Date: Created in 2018/11/12 20:08
*/
public class MainClass {
public static void main(String[] args) {
Adapter adapter = new Adapter(new Current());
adapter.user180V();
}
}
转载请注明原地址,宋德凌的博客:http://CoderOfSong.github.io 谢谢!