文章目录
一、类适配器
1.1、标准接口 和 实现类
package com.aop8.deginpattern.adaptee1;
/**
* 标准接口
*/
interface Target {
public void request();
}
/**
* 标准接口 的实现类
*/
class ConcreteTarget implements Target {
public void request() {
System.out.println("普通类 具有 普通功能... request() ");
}
}
1.2、特殊功能类、 适配器类(继承)
/**
* 特殊功能类。
* 有特殊功能,不符合标准接口的类
*/
class Adaptee {
public void specificRequest() {
System.out.println("被适配类具有 特殊功能... specificRequest() ");
}
}
/**
* 适配器类。
* 继承 特殊功能类 ,同时实现标准接口。
*/
class Adapter extends Adaptee implements Target {
public void request() {
super.specificRequest();
}
}
适配器类,继承 特殊功能类 ,同时实现标准接口。
适配器类里有两个方法
1.3、测试
public class AdapteeTest {
public static void main(String[] args) {
// 使用标准接口的功能类
Target concreteTarget = new ConcreteTarget();
concreteTarget.request();
// 使用特殊功能类,即适配类
Target specificAdapter = new Adapter();
specificAdapter.request();
}
}
二、对象适配器
2.1、标准接口 和 实现类
package com.aop8.deginpattern.adaptee2;
/**
* 标准接口
*/
interface Target {
public void request();
}
/**
* 标准接口 的实现类
*/
class ConcreteTarget implements Target {
public void request() {
System.out.println("普通类 具有 普通功能... request() ");
}
}
2.2、特殊功能类、 适配器类(构造器注入)
/**
* 有特殊功能,不符合标准接口的类
*/
class Adaptee {
public void specificRequest() {
System.out.println("被适配类具有 特殊功能... specificRequest() ");
}
}
/**
* 适配器类,直接关联 被适配类,同时实现标准接口
*/
class Adapter implements Target {
// 直接关联被适配类
private Adaptee adaptee;
// 可以通过构造函数传入具体需要适配的被适配类对象
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
public void request() {
// 这里是使用委托的方式完成特殊功能
this.adaptee.specificRequest();
}
}
2.3、测试
public class AdapteeTest2 {
public static void main(String[] args) {
// 使用普通功能类
Target concreteTarget = new ConcreteTarget();
concreteTarget.request();
// 使用特殊功能类,即适配类,
// 需要先创建一个被适配类的对象作为参数
Target adapter = new Adapter(new Adaptee());
adapter.request();
}
}
三、 UML图
-
Target 表示目标接口, 也就是客户端认可的标准接口, 只有符合
Target
接口规范的类(实现了 Target 接口),才能为Client工作。 -
Adaptee 表示 需要适配的类。 这个类的特征是没实现
Target
接口, 提供了一些特殊功能,不符合标准。
如果想被Client所用, 那么就需要一个适配器来让Client能够调用 这个被适配器标准化的特殊功能类 -
Adapter 适配器类, 适配器可以分为多种适配器
- 类适配器
- 对象适配器(委托方式)