以下情况使用适配器模式
你想使用一个已经存在的类,而它的接口不符合你的需求。
你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
(仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
其中目标接口target:
// 目标接口,或称为标准接口 package com.nudt.design.adapter; /** * Created by jeffrey on 15-12-2. */ public interface Target { public void request(); }
被适配类Adaptee
// 已存在的、具有特殊功能、但不符合我们既有的标准接口的被适配类 package com.nudt.design.adapter; /** * Created by jeffrey on 15-12-2. */ public class Adaptee { public void commonRequest(){ System.out.println("common function!"); }; }
第一种:适配器Adapter(继承模式):
// 适配器类,继承了被适配类,同时实现标准的目标接口 package com.nudt.design.adapter; /** * Created by jeffrey on 15-12-2. */ public class AdapterExtends extends Adaptee implements Target { @Override public void request() { System.out.println("after extends"); this.commonRequest(); } }
第二种:适配器Adapter(组合模式):
//通过继承目标标准接口,然后讲通用的被适配类作为成员变量组合进去 package com.nudt.design.adapter; /** * Created by jeffrey on 15-12-2. */ public class AdapterZuhe implements Target { private Adaptee special; public AdapterZuhe(Adaptee special){ this.special = special; } @Override public void request() { System.out.println("after zuhe!"); special.commonRequest(); } }
测试类:
package com.nudt.design.adapter; /** * Created by jeffrey on 15-12-2. */ public class NoteBook { //private Target concreteTarget; private Target target; //private Adaptee adaptee; public NoteBook(Target target){ this.target = target; } public void request(){ target.request(); } public static void main(String[] args) { //只有一个普通的工具 Adaptee adaptee = new Adaptee(); //要实现特殊功能 //方式一:采用组合的方式 Target target = new AdapterZuhe(adaptee); NoteBook nb1 = new NoteBook(target); nb1.request(); //方式二:采用继承的方式 Target target2 = new AdapterExtends(); NoteBook nb2 = new NoteBook(target2); nb2.request(); } }
最关键的一句话:继承被适配类,同时实现目标接口
原文地址:http://muyunzhe.blog.51cto.com/9164050/1719043