一开始看适配器模式的时候,我也感觉有点和装饰模式混淆了,
这里先贴张装饰模式的类图:
装饰模式,目的是为了在原有类功能的基础上,扩展其他功能而有的,
这种模式很好的应用了开放封闭原则,不动原来的类基础上去增加或修改其他功能。
另一方面,适配器模式,设计的目的是在接口不符合的情况下,增加一个适配器是的,原来
由于接口不兼容而无法工作的类可以一起工作。
适配器模式有种亡羊补牢的感觉,在代码后期维护,用其他模式往往很困难,这时就可以使用适配器模式来
进行相关的修改了。
下面看适配器的类图:
Adapter中使用adaptee,用户虽然是调用target,实际上用的却是adaptee中的方法内容。
下面看具体类代码:
Target类:
package com.blog.anla.Adapter;
/**
* 用户所期待的接口
* @author U-ANLA
*
*/
public class Target {
public void request(){
System.out.println("普通请求!");
}
}
Adaptee类:
package com.blog.anla.Adapter;
public class Adaptee {
public void specificRequest(){
System.out.println("特殊请求!");
}
}
Adapter类:
package com.blog.anla.Adapter;
public class Adapter extends Target{
private Adaptee adaptee = new Adaptee();
@Override
public void request(){
adaptee.specificRequest();
}
}
User类:
package com.blog.anla.Adapter;
/**
* 客户端类
* 对客户端来说,调用的是target的reqeust()方法
* @author U-ANLA
*
*/
public class User {
public static void main(String[] args) {
Target target = new Adapter();
target.request();
}
}
可以好好理解下适配器模式和装饰模式的根本区别。
赠人玫瑰手留余香(oo)