一、设计模式-适配器模式
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。
适配器模式(Adapter)包含以下主要角色。
1.目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。
2.适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口。
3.适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。
其实现方式主要有两种:类适配器和对象适配器。
类适配器:采用继承实现
对象适配器:采用对象组合方式实现
二、应用场景
引用网上一个例子:笔记本电脑电源一般用的都是5V电压,但是我们的家用电是220V,我们要让笔记本充上电,最好的办法应该是通过一个工具把220V的电压转换成5V,这个工具就是适配器。
首先使用类适配器来实现。先来看看类适配器的UML图。
目标接口Target就相当于上面的5V电压,Adaptee就是被适配的220V电压,Adapter就是适配器。实现代码如下所示。
public interface Target5V{ void chong5V(); }
被适配电压:220V
public class Adaptee220V{ public void chong220V(){ System.out.println("充220V电啦"); } }
适配器
public class Adapter extends Adaptee220V implements Target5V{ @Override public void chong5V(){ System.out.println("充5V电啦"); } }
测试
public class Test{ public static void main(String [] args){ Adapter adapter = new Adapter(); adapter.chong5v(); adapter.chong220V(); } }
其中,Adapter类 继承了 Adaptee220V类 然后实现了接口 Target5V 并实现了目标方法 chong5V(),类适配器的一个特点就是 Adapter 会去继承被适配类,这样适配器就直接拥有了被适配类中的方法,所以类适配器的缺点就是不够灵活,让我们看一下另外一种适配器。
来看对象适配器,先来看UML类图。
目标
public interface Target5V{ void chong5V(); }
被适配电压
public class Adaptee220V{ public void chong220V() { System.out.println("充220V电啦"); } }
适配器
public class Adater implements Target5V { private Adaptee220V adaptee220V; public Adapter(Adaptee220V adaptee220V) { this.adaptee220v = adaptee220v; } @Override public void chong5V() { System.out.println("充5V电啦"); } public void chong220V() { adaptee220V.chong220V(); } }
测试
public class Test { public static void main(String[] args) { Adaptee220V adapee220V = new Adaptee220V(); Adapter adapter = new Adapter(adaptee220V) adapter.chong5V(); adapter.chong220V(); } }