一,模式定义:
将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式
二,适配器模式的角色包括:
(1)Target(目标抽象类)
目标抽象类定义客户要用的特定领域的接口,可以是个抽象类或接口,也可以是具体类;在类适配器中,由于Java不允许多继承,它只能是接口。
(2)Adapter(适配器类)
适配器类可以调用另一个接口,作为一个转换器,对Adapter和Target进行适配。适配器Adap是适配器模式的核心,在类适配器中,它通过实现Target接口并继承Adaptee类来使二者产生联系;在对象适配器中,它通过继承Target并关联一个对象使二者产生联系。
(3)Adaptee(适配者类)
适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配。适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下甚至没有适配者类的源代码。
(4)Client(客户端类)
在客户类中针对目标抽象类进行编程,调用在目标抽象类中定义的业务方法。
适配器模式包括类适配器和对象适配器。
下面是我模仿电脑连接通过装换器连接网线的一个Demo
类适配器:
代码实现:
Adaptee
package com.hhq.Adapter;
/**
* 适配者类 这里指网线
*/
public class Adaptee {
public void gonet() {
System.out.println("我可以上网啦");
}
}
Target
package com.hhq.Adapter;
/**
* 目标抽象类 面向接口编程 既usb接口的抽象类
*/
public interface Target {
public void Request();
}
Adapter
package com.hhq.Adapter;
/**
*适配者类 这里指 usb装换口
*/
public class Adapter extends Adaptee implements Target {
/**
* 重写Target中的方法,继承 Adaptee 调用父类的gonet()
*/
@Override
public void Request() {
super.gonet();
}
}
Client
package com.hhq.Adapter;
/**
* 用户类
*/
public class Client {
public void getUsb(Target target) {
target.Request();
}
public static void main(String[] args) {
Client client = new Client();
Target target = new Adapter();
Adaptee adaptee = new Adaptee();
client.getUsb(target);
}
}
对象适配器:
package com.hhq.Adapter;
/**
*适配者类 这里指 usb装换口
*/
public class Adapter implements Target {
Adaptee adaptee = null;
public Adapter(Adaptee adaptee) {
adaptee.gonet();
}
/**
* 重写Target中的方法,继承 Adaptee 调用父类的gonet()
*/
@Override
public void Request() {
}
}
package com.hhq.Adapter;
/**
* 用户类
*/
public class Client {
public void getUsb(Target target) {
target.Request();
}
public static void main(String[] args) {
Client client = new Client();
Adaptee adaptee = new Adaptee();
Target target = new Adapter(adaptee);
client.getUsb(target);
}
}