设计模式之适配器模式(笔记)
适配器模式
适配器模式是作为两个不兼容接口之间的桥梁。这种类型的设计模式属于结构型模式,他结合了两个独立的接口的功能。
这种模式涉及到一个单一的类,该类负责加入独立的或者不兼容的接口功能
介绍
意图:
将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适配器模式主要分为两个部分。其中,作为用户的Client由于某种原因,比如已经定义好规范,需要使用到ITarget接口的request()方法来完成某项功能。但是,他必须得使用到Adaptee相关的数据或者方法来完成Request()的功能,Adaptee是不能被我们改变的,他可能是第三方库的东西,又可能被其他很多地方使用,所以我们不能改变他,否则我们就可以直接通过Adaptee实现ITarget接口就可以使用了。为了让他们能够工作,便有了适配器模式的出现,在这个模式中,我们往往需要实现Adapter类,并将Adaptee作为引用被Adaptee持有,这样Adapter就能够使用Adaptee的方法了,同时,由于他也实现了ITarget接口的request方法,他也能够被实现定义好的规范所使用,在他真正实现的Request方法中,能够将SpecificRequest的输出作为Request的输入。
如果,下面是简单的类图
适配器模式就是将适配器放置在两个事物之间,他的目的并不是改变或者添加某些行为而是为了适配两种不同的接口,两种不同的方法。完成请求的传递,这两个方法之间没有任何联系,他需要通过这个接口来完成他们之间互相的调用,并不是为了添加额外的行为。
适配器模式的一种实现方法
public interface ITarget {
void request();
}
public class Adaptee {
public void specificRequest() {
//具体实现
System.out.println("Adaptee is Running");
}
}
public class Adapter implements ITarget{
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
// TODO Auto-generated constructor stub
this.adaptee=adaptee;
}
@Override
public void request() {
// TODO Auto-generated method stub
this.adaptee.specificRequest();
}
}
public class Client {
public static void main(String[] args) {
ITarget iTarget=new Adapter(new Adaptee());
iTarget.request();
}
}
et=new Adapter(new Adaptee());
iTarget.request();
}
}