您的位置:首页 > 其它

适配器模式

2014-06-01 21:30 316 查看
 适配器模式(Adapter)

          将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

          构成:

a)  目标抽象角色(Target):定义客户要用的特定领域的接口

b)  适配器(Adapter):调用另一个接口,作为一个转换器

c)  适配器(Adaptee):定义一个接口,Adapter需要接入

d)  客户端(Client):协同对象符合Adapter适配器

  junit中适配器模式的应用:

. 在runBare方法中,通过runTest方法将我们自己编写的testXXX方法进行了适配,使得Junit可以执行我们自己编写的TestCase,runTest的方法实现如下:

在runTest方法中,首先获得我们自己编写的testXXX方法所对应的Method对象(不带参数),然后检查该Method所对应的方法是否是public的,如果是则调用Method对象的invoke方法来执行我们自己编写的testXXX方法

  分类:

   类适配器(采用继承的方式)

例:

a)  目标抽象角色(Target):定义客户要用的特定领域的接口

package com.ebuair.pattern.inheritadapter;

public interface Invoke {
public void invokeMethod();
}

b)  适配器(Adapter):调用另一个接口,作为一个转换器

package com.ebuair.pattern.inheritadapter;

public class Adapter extends Adaptee implements Invoke{
//使用继承的方式实现适配器模式
//实际上就是将类Adaptee的targetMethod方法和接口Invoke的invokeMethod方法关联起来
@Override
public void invokeMethod() {
this.targetMethod();
}
}


c)  适配器(Adaptee):定义一个接口,Adapter需要接入
package com.ebuair.pattern.inheritadapter;

public class Adaptee {
public void targetMethod(){
System.out.println("target method invoked!");
}
}


d)  客户端(Client):协同对象符合Adapter适配器
  package com.ebuair.pattern.inheritadapter;

public class Client {
public static void main(String[] args) {
Invoke invoke = new Adapter();
invoke.invokeMethod();
}
}

    对象适配器(采用对象组合的方式)推荐使用

例:

a)  目标抽象角色(Target):定义客户要用的特定领域的接口

package com.ebuair.pattern.objectadapter;

public interface Invoke {
public void invokeMethod();
}

b)  适配器(Adapter):调用另一个接口,作为一个转换器

package com.ebuair.pattern.objectadapter;

public class Adapter implements Invoke{
//使用对象适配器与继承适配器的区别是不再继承Adaptee类,而是定义一个Adaptee对象
//实现Adaptee类的targetMethod方法与Invoke接口的invokeMethod方法关联
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void invokeMethod() {
this.adaptee.targetMethod();
}
}


c)  适配器(Adaptee):定义一个接口,Adapter需要接入
package com.ebuair.pattern.objectadapter;

public class Adaptee {
public void targetMethod(){
System.out.println("target method invoke!");
}
}


d)  客户端(Client):协同对象符合Adapter适配器
package com.ebuair.pattern.objectadapter;

public class Client {
public static void main(String[] args) {
Invoke invoke = new Adapter(new Adaptee());
invoke.invokeMethod();
}
}

缺省的适配器模式(AWT,Swing都采用这种模式)
例:

a)抽象的服务接口

package com.ebuair.pattern.defaultadapter;

public interface AbstractService {
public void service1();
public void service2();
public void service3();
}


b)适配器adapter
package com.ebuair.pattern.defaultadapter;

public class ServicesAdapter implements AbstractService{
@Override
public void service1() {

}
@Override
public void service2() {

}
@Override
public void service3() {

}
}


c)具体的服务类
package com.ebuair.pattern.defaultadapter;

public class ConcreateService extends ServicesAdapter{
@Override
public void service1() {
System.out.println("target method invoked");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  适配器模式