简述
适配器模式,说的就是不改变原有类的情况下,重新建立一个类,这个类当中既承载了上一个类的方法,又可以对自己类的新方法进行设置,适配器当中包含了三个角色,分别是Source(待适配的类),Targetable(目标接口),Adapter(适配器),我们重点要下文章的地方就是这个适配器。
书面例子
首先建立一个待适配器
import java.util.logging.Logger;
public class Source {
private final static Log logger=LogFactory.getLog(Source.class);
public void enitTextFile(){
Logger.info("a text file ending");
}
}
假如现在这个待适配器需要拥有适配器来完成更多的一些功能,那么就可以再更新接口当中的方法:
public interface Targetable {
void editTextFile();
void editWordFile();
}
紧接着我们继续将这个适配器进行书写:
public class Adapter extends Source implements Targetable{
private final static Log logger=LogFactory.getLog(Adapter.class);
public void editWordFile(){
logger.info("a word file editing");
}
public static void main(String[] args) {
Targetable target=new Adapter();
target.editTextFile();
target.editWordFile();
}
}
实际例子
其实上面的例子只是一个大众化的例子,假如你去过国外旅行的话,那么理解起来适配器就会并不觉得复杂,甚至还觉得它是多么地贴近生活呢
首先我们可以了解一下国外地插头和我们中国的插头是不一样的,他们需要圆孔来插,那么这个时候就需要改变我们的充电器了,而不是去改变人家的插座,毕竟人家不可能因为中国的游客过去就轻易地改变。
那么如何将带有中国的充电器进行充电呢,这个时候就需要用到适配器了,上面连接的是中国的充电器,再将其下端插入到对应的国外插座上面去,之后就可以进行一个充电了。
那么步骤就来了
首先建立国外的接口以及其对应的方法:
public interface GWSocketInterface {
void powerGW();
}
再定义一个国外的充电器,这个充电器也是圆孔的,插上之后就会显示使用圆孔进行充电
public class GWSocket implements GWSocketInterface{
@Override
public void powerGW() {
System.out.println("使用圆孔进行充电");
}
}
再接下来我们就需要定义一个酒店来对这个插座进行包含啦
public class Hotel {
//旅馆中有一个国外的插口
private GWSocketInterface gwSocketInterface;
public Hotel(){
}
public Hotel(GWSocketInterface gwSocketInterface){
this.gwSocketInterface=gwSocketInterface;
}
public void setGwSocketInterface(GWSocketInterface gwSocketInterface){
this.gwSocketInterface=gwSocketInterface;
}
//旅馆中有一个充电的功能
public void charge(){
//使用德标插口充电
gwSocketInterface.powerGW();
}
}
对应的测试结果如图所示:
接下来就是我现在用的是国内的三孔插头和充电器,那么我现在要去国外旅行,就需要用到适配器来完成对于手机的充电,那么这个时候我先去准备两样东西,分别是中国接口和中国插座实现中国接口。可以认为这两个东西是我将要待到国外去的,但是现在还不能实现,就需要用到适配器来完成
首先是来定义国内的插座
public class GBSocket implements GBSocketInterface{
@Override
public void powerGB() {
System.out.println("使用三项扁头插孔充电");
}
}
然后是接口:
public interface GBSocketInterface {
void powerGB();
}
接下来就是构造一个适配器了:
public class SocketAdapter implements GWSocketInterface{
//组合新接口,这个接口在适配器的上方
private GBSocketInterface gbSocketInterface;
public SocketAdapter(){
}
public SocketAdapter(GBSocketInterface gbSocketInterface){
this.gbSocketInterface=gbSocketInterface;
}
//将对接接口的调用适配到新接口
public void powerGW(){
gbSocketInterface.powerGB();
}
}
接下来就是测试适配器的使用过程
public class TestAdapter {
public static void main(String[] args) {
GBSocketInterface gbSocketInterface=new GBSocket();
Hotel hotel=new Hotel();
SocketAdapter socketAdapter=new SocketAdapter(gbSocketInterface);
hotel.setGwSocketInterface(socketAdapter);
hotel.charge();
}
}
它是先把国内的给连接上去,再接上国外的
结果如下图所示
适配器模式的三个特点
1.适配器对象实现原有接口
2.适配器对象组合一个实现新接口的对象(这个对象也可以不实现接口,只是一个单纯的对象)
3.对适配器原有方法的调用被委托给新接口的实列的特定方法
好了,这一期的文章就结束啦,我是明怀,一个在互联网苟且偷生的程序猿,你知道的越多,你不知道的就越多,我们下期见!