适配器模式
适配器模式:将一个类的接口转化为客户希望的另一个接口,使得原本因为接口不兼容而不能一起工作的那些类可以共同工作.
何时使用适配器模式:希望复用一些现存的类,但是接口和复用环境的要求不一致,可以通过适配(类似于电源适配器,可以把220V电压转化为可以使用的电压),两个类所做的事情相同或者类似,但是具有不同的接口时,可以使用它,由于类共享同一接口,客户代码统一调用同一接口,这样更简单,直接,紧凑.
比如说姚明到NBA打篮球,不会英语,可以给姚明找个翻译,这个翻译就是适配器
//客户所期待的接口,目标可以是具体或者抽象的类,也可以是接口
public interface Target {
public abstract void specificRequest();
}
public class Adapter implements Target {
private Adaptee adaptee=new Adaptee();
@Override
public void specificRequest() {
adaptee.request();
}
}
//需要适配的类
public class Adaptee {
public void request() {
System.out.println("老代码中有关请求的代码");
}
}
public class Demo {
public static void main(String[] args) {
Target target=new Adapter();
target.specificRequest();
}
}
如果能事先预防接口不同的问题,不匹配问题就不会发生,有小的接口不统一问题发生时,及时重构,问题不至于扩大,只有碰到无法改变原有设计和代码的情况下,才考虑适配,事后控制不如事中控制,事中控制不如事前控制,适配器模式虽好,但是如果无视它的使用场合而盲目使用,就本末倒置了,所以适配往往在开发后期或者维护时使用它,那么有没有在开发初期就使用它的情况呢?有的,比如公司设计一系统时考虑第三方开发组件,而这个组件的接口和我们系统的接口是不相同的,而我们也没有必要为了迎合它而改变自己的接口,这时也是可以考虑使用适配器模式来解决接口不同的问题.