设计模式:适配器模式代码编写
在软件开发中,适配器模式是一种常用的设计模式,用于将现有类(即适配者)转换为客户端代码所需的接口。它的作用类似于电源转换器,将电器插头的形状转换为电源插座的形状,使得不同国家的电器可以在相同的电源插座上使用。
适配器模式主要由三个角色组成:目标接口、适配者和适配器。其中,目标接口是客户端所期望的接口;适配者是需要被适配的类;适配器是实现目标接口并包装了适配者对象的类。适配器模式的核心是将适配者对象转换成目标接口对象,使得客户端可以通过目标接口来访问适配者对象的功能。
下面是一个适配器模式的示例代码,假设已有一个适配者类Adaptee,它有一个方法specificRequest():
```java
public class Adaptee {
public void specificRequest() {
// 实现适配者类的功能
}
}
```
现在需要将Adaptee适配成目标接口TargetInterface,目标接口有一个方法request():
```java
public interface TargetInterface {
public void request();
}
```
为了实现适配器类Adapter,需要继承TargetInterface接口,并持有Adaptee对象的引用:
```java
public class Adapter implements TargetInterface {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
public void request() {
adaptee.specificRequest();
}
}
```
在Adapter的request()方法中,调用Adaptee的specificRequest()方法即可完成适配。
除了上述示例代码,适配器模式还有许多其他的实现方式。下面从多个角度来深入分析适配器模式。
1. 类适配器和对象适配器
适配器模式主要有两种实现方式:类适配器和对象适配器。
类适配器使用多重继承的方式,继承了Adaptee类和TargetInterface接口,并实现TargetInterface接口:
```java
public class Adapter extends Adaptee implements TargetInterface {
public void request() {
specificRequest();
}
}
```
对象适配器使用组合的方式,持有一个Adaptee对象的引用,并实现TargetInterface接口:
```java
public class Adapter implements TargetInterface {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
public void request() {
adaptee.specificRequest();
}
}
```
相比之下,类适配器虽然实现起来简单,但它要求Adaptee必须是继承自某个类的,因此不能适配Adaptee的子类。而对象适配器则可以适配任何类型的Adaptee对象,因此更加灵活。
2. 接口适配器
接口适配器(也称为默认适配器)是适配器模式的一种变体,它为目标接口提供默认的实现,避免了实现所有方法的代码冗余。
假设目标接口中有多个方法,而适配器只需要实现其中的一部分方法。在这种情况下,如果直接实现TargetInterface接口会导致代码冗余,因为需要对没有实现的方法进行空实现。此时可以使用接口适配器,定义一个抽象类实现TargetInterface接口,其中方法都为空实现。然后再定义一个具体的适配器类,只实现需要的方法即可。
```java
public interface TargetInterface {
public void method1();
public void method2();
public void method3();
}
public abstract class AbstractAdapter implements TargetInterface {
public void method1() {}
public void method2() {}
public void method3() {}
}
public class Adapter extends AbstractAdapter {
public void method1() {
// 实现目标接口的方法1
}
}
```
3. 对象组合和对象继承
适配器模式包括两种实现方式:对象组合和对象继承。
对象组合使用一个被适配对象的实例作为适配器的成员变量,具体的适配工作由适配器自己完成。
对象继承则使用类继承的方式来实现适配器,适配器同时继承目标抽象类和被适配者类。
从实现难度和灵活性来看,对象组合比对象继承更为优秀。对象组合使得适配器更加灵活,可以适配多种类型的适配者,也可以同时适配多个适配者。而对象继承的方式,由于适配器类同时继承了目标抽象类和被适配者类,因此会产生一定的局限性,只能适配某些特定的类。
扫码咨询 领取资料