iihero@ChinaUnix, ehero.[iihero] 数据库技术的痴迷爱好者. 您可以通过iihero AT qq.com联系到我 以下是我的三本图书: Sybase ASE in Action, Oracle Spatial及OCI高级编程, Java2网络协议内幕
分类: 项目管理
2013-07-23 09:56:37
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
1.你想使用一个已经存在的类,而它的接口不符合你的需求。 2.你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口 可能不一定兼容的类)协同工作。 3.(仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行 子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
1.Target 定义Client使用的与特定领域相关的接口。 2.Client 与符合Target接口的对象协同。 3.Adaptee 定义一个已经存在的接口,这个接口需要适配。 4.Adapter 对Adaptee的接口与Target接口进行适配
示例:
结果:package com.sql9.structured;
// Target interface Target { void newCall(String abc); }
// Adaptee class class Adaptee { public void sampleOpertion(String abc) { System.out.println("called for sampleOperation: " + abc); } }
// Adapter class Adapter implements Target { Adaptee _a; public Adapter(Adaptee a) { _a = a; System.out.println("This is light adapter for object construction."); } public void newCall(String abc) { _a.sampleOpertion(abc); } }
// class Adapter class HeavyAdapter extends Adaptee implements Target { public HeavyAdapter() { System.out.println("this is heavy adapter for class extend."); } public void newCall(String abc) { super.sampleOpertion(abc); } }
public class AdapterTest {
/** * @param args */ public static void main(String[] args) { Target t = new Adapter(new Adaptee()); t.newCall("新方法"); t = new HeavyAdapter(); t.newCall("新方法"); }
}
This is light adapter for object construction. called for sampleOperation: 新方法 this is heavy adapter for class extend. called for sampleOperation: 新方法
总结:
可以对象适配,也可以类适配,按照需要进行选择。