`
linbzh
  • 浏览: 71710 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

composite合成模式

阅读更多

      composite合成模式可以使用户对象以同样的方式对待单独的对象或复合的对象,合成模式要设计一个公共接口,即可提供给单独的对象使用,也可以供给复合对象使用。
      使得用户类一致地使用单独的对象或者复合的对象,也不必关系要如何处理复合对象,只需要向复合对象添加单独对象即可。
      junit的Test接口的两个子类TestCase和TestSuite就是使用了合成模式。

      其部分关键源代码如下,合成模式的代码结构基本上跟下面代码一样:

package junit.framework;
/** * A <em>Test</em> can be run and collect its results. * * @see TestResult
 */
public interface Test {
 /**
  * Counts the number of test cases that will be run by this test.
  */
 public abstract int countTestCases();
 /**
  * Runs a test and collects its result in a TestResult instance.
  */
 public abstract void run(TestResult result);
}

package junit.framework;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public abstract class TestCase extends Assert implements Test {
 /*......*/
 public int countTestCases() {
  return 1;
 }
 public TestResult run() {
  TestResult result= createResult();
  run(result);
  return result;
 }
 /**
  * Runs the test case and collects the results in TestResult.
  */
 public void run(TestResult result) {
  result.run(this);
 }
 /*......*/
}
package junit.framework;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Vector;

public class TestSuite implements Test {
 /*......*/
 private Vector<Test> fTests= new Vector<Test>(10);
 /**
  * Adds a test to the suite.
  */
 public void addTest(Test test) {
  fTests.add(test);
 }
 /**
  * Adds the tests from the given class to the suite
  */
 public void addTestSuite(Class<? extends TestCase> testClass) {
  addTest(new TestSuite(testClass));
 }
 
 /**
  * Counts the number of test cases that will be run by this test.
  */
 public int countTestCases() {
  int count= 0;
  for (Test each : fTests)
   count+=  each.countTestCases();
  return count;
 }

 /**
  * Runs the tests and collects their result in a TestResult.
  */
 public void run(TestResult result) {
  for (Test each : fTests) {
     if (result.shouldStop() )
      break;
   runTest(each, result);
  }
 }
 
 public void runTest(Test test, TestResult result) {
  test.run(result);
 }
 /*......*/
}

 要一起执行若干个TestCase只要向TestSuit的addTest添加,和TestCast一样执行run即可。

分享到:
评论

相关推荐

    源码:阎宏设计模式光盘

    com.javapatterns.composite 合成模式 com.javapatterns.decorator 装饰模式 com.javapatterns.dip 依赖倒转原则 com.javapatterns.doubledispatch 专题:单分派与多分派 com.javapatterns.facade 门面模式 ...

    设计模式之合成模式Java实现和类设计图

    合成模式(Composite Pattern)是软件工程中的一种设计模式,它属于结构型模式,主要用于处理对象的组合。在合成模式中,我们能够将简单对象和组合对象以统一的方式进行操作,这样用户就可以忽略对象的复杂性,而...

    23种JAVA设计模式和15种J2EE设计模式

    Composite 合成模式 合成模式允许将对象组合成树形结构,以表示“整体-部分”的层次结构。例如,在购买礼物时,可以将多个小礼物组合成一个大礼盒,既满足了整体的送礼需求,又体现了礼物的多样性,提升了礼物的...

    学习php设计模式 php实现合成模式(composite)

    合成模式(Composite)是一种设计模式,它允许我们构建树形结构来表示部分-整体的层次。在PHP中,这种模式可以被用来构建复杂的对象结构,同时保持代码的简洁性和一致性。 1. **意图与概念** 合成模式的主要目标是...

    java面试800题

    facade门面模式、proxy代理模式、adapter适配器(变压器)模式、composite合成模式、decorator装饰模式、bridge桥梁模式、flyweight享元模式 行为模式 template模板方法模式、memento备忘录模式、observer观察者模式...

    JAVA与模式

    ### JAVA与模式之合成模式详解 #### 一、引言 在阎宏博士的经典著作《JAVA与模式》中,合成模式被详细介绍并解释为一种重要的设计模式,它属于对象的结构模式之一,常被称为“部分—整体”模式。合成模式通过树形...

    C#设计模式结构型

    在结构型设计模式中,合成模式(Composite)和享元模式(Flyweight)是两个重要的模式。 首先,我们来讨论合成模式。合成模式,又称为组合模式,它允许将对象组合成树形结构来表示整体/部分的层次结构。这种结构...

    Java与模式 学习

    Java与模式:迭代子(Iterator)模式、合成(Composite)模式、抽象工厂模式等

    设计模式学习笔记总结

    1. **合成(Composite)模式**:合成模式允许我们构建树形结构来表示部分-整体的关系。在C#中,它常用于构建分层的复杂对象,使得用户可以统一处理单个对象和对象组合,提供了“一视同仁”的操作接口。 2. **桥梁...

    composite-image:画布合成画

    3. `context.globalCompositeOperation`:设置或返回当前的合成模式,这决定了新图像如何与画布上的已有图像结合。例如,"source-over"表示新图像覆盖旧图像,"multiply"则是将新图像与旧图像相乘等。 4. `canvas....

    Java 设计模式

    java的设计模式大体上分为三大类: ...6、合成复用原则(Composite Reuse Principle)  原则是尽量使用合成/聚合的方式,而不是使用继承。继承实际上破坏了类的封装性,超类的方法可能会被子类修改。

    Delphi模式编程第一分卷

    第11章 合成模式(Composite) 2 11.1 模式解说 11.2 结构和用法 11.2.1 模式结构 11.2.2 代码模板 11.2.3 问题讨论 11.3 范例与实践 11.3.1 合成模式在组织机构管理系统中的应用 11.3.2 范例小结 第12章 ...

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    第5章 合成(composite)模式 39 第6章 桥接(bridge)模式 52 第7章 职责型模式介绍 62 第8章 单例(singleton)模式 67 第9章 观察者(observer)模式 72 第10章 调停者(mediator)模式 85 第11章 代理(proxy)模式 97 第12...

    Java设计模式(泡妞经典版)

    Composite 模式可以使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。 例如,在 Composite 模式的例子中,可以使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。 9. ...

    JAVA常用设计模式详解大全.doc

    8. 合成模式(Composite Pattern) 合成模式是一种结构模式,提供了一种将对象组合成树形结构的方式,使得客户端可以统一地对待单个对象和对象组合。合成模式的优点是可以实现对象的组合和递归,提高了代码的可读性...

    Java中23种设计模式详解

    7. 合成模式(Composite) 合成模式将对象组合成树形结构以表示“部分-整体”的层次结构。这种模式使得客户对单个对象和复合对象的使用具有一致性。 8. 装饰模式(Decorator) 装饰模式动态地给一个对象添加一些...

    Delphi模式编程第二分卷

    第11章 合成模式(Composite) 2 11.1 模式解说 11.2 结构和用法 11.2.1 模式结构 11.2.2 代码模板 11.2.3 问题讨论 11.3 范例与实践 11.3.1 合成模式在组织机构管理系统中的应用 11.3.2 范例小结 ...

    JAVA设计模式与J2EE设计模式.doc

    - **合成模式(Composite)**:合成模式将对象组合成树形结构以表示部分-整体的关系,使客户端可以一致地处理单个对象和组合对象。比如,MM选择T恤、裙子和包包作为一套生日礼物,它们通过合成模式组合在一起。 - ...

Global site tag (gtag.js) - Google Analytics