适配器模式

定义

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

构成

  目标抽象角色(Target):定义客户要用的特定领域的接口
  适配器(Adapter):调用另一个接口,作为一个转换器
  适配器(Adaptee):定义一个接口,Adapter需要接入

  比如我们家的台灯的插头是2相的,但是我们墙壁上的电源插座是3相的,那我们如何用呢???可以去买一个插排,插排接电源的是3孔的,插排上有很多插孔是2孔的,那么插排起到的作用就是桥梁,起转换的作用,在这里就是适配器模式中的适配器

分类

  常用的适配器模式有两种:类适配器(采用继承的方式)和对象适配器(采用对象组合的方式)

java代码实现

类适配器:

//台灯插头
public interface Target {
public void method1();
}
//墙壁上的电源
public class Adaptee {
public void method2(){
System.out.println("Adaptee.method2()");
}
}
//插排
public class Adapter extends Adaptee implements Target {
@Override
public void method1() {
this.method2();
}
}
public class Client {
public static void main(String[] args) {
Target target = new Adapter();
target.method1();
}
}

对象适配器:

//台灯插头
public interface Target {
public void method1();
}
//墙壁上的电源
public class Adaptee {
public void method2(){
System.out.println("Adaptee.method2()");
}
}
//插排
public class Adapter implements Target {
private Adaptee adaptee; public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
} @Override
public void method1() {
adaptee.method2();
}
}
public class Client {
public static void main(String[] args) {
Target target = new Adapter(new Adaptee());
target.method1();
}
}

适配器模式在junit3框架中的应用

TestCase.java中的runTest()方法

public void runBare() throws Throwable {
setUp();
try {
runTest();
}
finally {
tearDown();
}
} protected void runTest() throws Throwable {
assertNotNull(fName);
Method runMethod= null;
try {
runMethod= getClass().getMethod(fName, null);
} catch (NoSuchMethodException e) {
fail("Method \""+fName+"\" not found");
}
if (!Modifier.isPublic(runMethod.getModifiers())) {
fail("Method \""+fName+"\" should be public");
} runMethod.invoke(this, new Class[0]);
}

在runBare()方法中,通过runTest()方法将我们自己编写的testXXX()方法进行了适配,使得junit框架可以执行我们自己编写的TestCase;

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

在这里目标接口Target和适配器Adapter变成了同一个类TestCase,而测试用例,作为Adaptee

junit3中引入适配器模式的好处

1)使用Adapter模式简化测试用例的开发,通过按照方法命名的规范来开发测试用例,不需要进行大量的类继承,提高代码的复用,减轻测试人员的工作量;

2)使用Adapter可以重新定义Adaptee的部分行为,如增强异常处理等

junit适配器模式应用的更多相关文章

  1. junit设计模式--适配器模式

    适配器(Adapter)模式 在软件系统中,由于环境的变化,常常需要将"一些现存的对象"放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的.那么如何应对这种" ...

  2. junit测试延伸--方法的重复测试

    在实际编码测试中,我们有的时候需要对一个方法进行多次测试,那么怎么办呢?这个问题和测试套件解决的方案一样,我们总不能不停的去右键run as,那怎么办呢?还好伟大的junit帮我们想到了. OK,现在 ...

  3. 设计模式课程 设计模式精讲 12-2 适配器模式coding

    1 重要 1.1 类适配器和对象适配器最大的区别 2 代码演练 2.1 代码演练1(类适配器模式) 2.2 代码演练2(对象适配模式) 2.3 代码演练3(具体应用场景) 1 重要 1.1 类适配器和 ...

  4. 记一个mvn奇怪错误: Archive for required library: 'D:/mvn/repos/junit/junit/3.8.1/junit-3.8.1.jar' in project 'xxx' cannot be read or is not a valid ZIP file

    我的maven 项目有一个红色感叹号, 而且Problems 存在 errors : Description Resource Path Location Type Archive for requi ...

  5. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  6. PHP设计模式(七)适配器模式(Adapter For PHP)

    适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 如下图(借图): // 设置书的接口 // 书接口 interface BookI ...

  7. AndroidStudio — Error:Failed to resolve: junit:junit:4.12错误解决

    原博客:http://blog.csdn.net/u013443865/article/details/50243193 最近使用AndroidStudio出现以下问题: 解决:打开app下的buil ...

  8. 「译」JUnit 5 系列:环境搭建

    原文地址:http://blog.codefx.org/libraries/junit-5-setup/ 原文日期:15, Feb, 2016 译文首发:Linesh 的博客:环境搭建 我的 Gith ...

  9. 《JS设计模式笔记》 5,适配器模式

    //适配器模式的作用就像一个转接口. jQuery("#"+id); $id=function (id) { return jQuery("#"+id)[0]; ...

随机推荐

  1. mootools upgrate from 1.2 to 1.3 or 1.4

    Update from 1.2 to 1.3 lorenzos edited this page on 8 Jul 2011 · 2 revisions Pages 19 Home Home Chan ...

  2. 【linux】cut

    vim test id name age score 101 paul 18 100 102 suan 11 99 103 peter 18 98 [root@andon ~]# cut -f 2 t ...

  3. VBA相关

    --能否彻底隐藏某行或某列 用代码隐藏列,将其放在Private Sub Worksheet_SelectionChange(ByVal Target As Range)Columns(1).Enti ...

  4. 共享内存是最快的一种IPC方式

    在linux进程间通信的方式中,共享内存是一种最快的IPC方式.因此,共享内存用于实现进程间大量的数据传输,共享内存的话,会在内存中单独开辟一段内存空间,这段内存空间有自己特有的数据结构,包括访问权限 ...

  5. Hadoop学习2--Linux准备及环境准备

    1.环境安装: 虚拟机:VMware Player 系统:Ubuntu12 注意事项:注意位数,包括系统,java,Hadoop 2.切换账号 当前登录账号是自己的账号,如果想切换到root,且是第一 ...

  6. ScalaTour 2.函数

    /** * 1. case class与模式匹配 */ object TestFunction extends App{ def value(expr:Expr): Int = expr match ...

  7. SpringMVC控制器设值原理分析(ModelAndView的值通过HttpServletRequest直接取到的原因)

    @RequestMapping("/userlist.do") public String getUserList(Model model){ HttpServletRequest ...

  8. Ant -- Another Neat Tool

      最早用来构建著名的Tomcat,可以看成是一个Java版本的Make.也正因为使用了Java,Ant是跨平台的.   Ant有一个构建脚本build.xml <?xml version = ...

  9. codeforces 431 D. Random Task 组合数学

    题意: 给定m,k 0 <= m <= 10^18 ,1 <= k <= 64 求一个数n,满足n+1,n+2,...n+n这n个数中,刚好有m个数的2进制表示法刚好有k个1 ...

  10. NeHe OpenGL教程 第三课:颜色渲染

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...