Java设计模式之适配器模式
Posted 红日666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java设计模式之适配器模式相关的知识,希望对你有一定的参考价值。
一、概述:
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
二、解决的问题:
即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
三. 模式中的角色:
1、目标接口(Target):
客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
2、需要适配的类(Adaptee):
需要适配的类或适配者类。
3、适配器(Adapter):
通过包装一个需要适配的对象,把原接口转换成目标接口。
四. 实现方式:
1、类的适配器模式(采用继承实现):
类图如下:
代码举例如下:
/**
* 目标接口【标准接口】
*/
public interface Target
void request();
/**
* 受改造者【需要适配的类】:
* 已存在的、具有特殊功能、但不符合我们既有的标准接口的类
*/
public class Adaptee
public void specificRequest()
System.out.println("被适配类具有 特殊功能...");
/**
* 适配器类:
* 继承了被适配类,同时实现标准接口
*/
public class Adapter extends Adaptee implements Target
@Override
public void request()
super.specificRequest();
//类适配器调用
Target adapter = new Adapter();
adapter.request();
2、对象适配器模式(采用对象组合实现):
上面这种实现的适配器称为类适配器,因为 Adapter 类既继承了 Adaptee (被适配类),也实现了 Target 接口(因为 Java 不支持多继承,所以这样来实现),在 Client 类中我们可以根据需要选择并创建任一种符合需求的子类,来实现具体功能。另外一种适配器模式是对象适配器,它不是使用多继承或继承再实现的方式,而是使用直接关联,或者称为委托的方式,类图如下:
代码举例如下:
/**
* 适配器类:
* 直接关联被适配类,同时实现标准接口
*/
public class Adapter implements Target
// 直接关联被适配类
private Adaptee adaptee;
// 可以通过构造函数传入具体需要适配的被适配类对象
public Adapter (Adaptee adaptee)
this.adaptee = adaptee;
@Override
public void request()
// 这里是使用委托的方式完成特殊功能
this.adaptee.specificRequest();
//对象适配器调用
Adaptee adaptee = new Adaptee();
Target adapter = new Adapter(adaptee);
adapter.request();
以上两者输入结果相同。
使用对象适配器模式,可以使得 Adapter 类(适配类)根据传入的 Adaptee 对象达到适配多个不同被适配类的功能,当然,此时我们可以为多个被适配类提取出一个接口或抽象类。这样看起来的话,似乎对象适配器模式更加灵活一点。
五、优缺点:
1、优点:
- 复用性
- 扩展性
2、缺点:
- 过多的使用适配器,会让系统非常零乱,不容易整体进行把握。
六、适用场景:
- 想要使用一个已经存在的类,但是它的接口不符合你的需求,这种情况可以使用适配器模式,来把已有的实现转换成你需要的接口。
- 想创建一个可以复用的类,这个类可能和一些不兼容的类一起工作,这种情况可以使用适配器模式,到时候需要什么就适配什么。
3.想使用一些已经存在的子类,但是不可能对每一个子类都进行适配,这种情况可以选用对象适配器,直接适配这些子类的父类就可以了。
参考:
Java设计模式综述
以上是关于Java设计模式之适配器模式的主要内容,如果未能解决你的问题,请参考以下文章