为生存而奔跑

   :: 首页 :: 联系 :: 聚合  :: 管理
  271 Posts :: 0 Stories :: 58 Comments :: 0 Trackbacks

留言簿(5)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 319839
  • 排名 - 75

最新评论

阅读排行榜

评论排行榜

Observer模式

Observer模式通常有
1.Subject 提供注册和删除的方法,可以保存多个观察者
2.ConcreteSubject 当他的状态发生改变时,通知所有的观察者
3.Observer 定义当目标发生改变时需要更新的接口
4.ConcreteObserver 实现Observer接口

在Junit中,Subject和ConcreteSubject是一个,即TestResult

在Junit中,有三种方式实现TestListener接口,分别是TextUI,AWTUI,SwingUI. 使用Observer模式的原因是:当增加其他UI方式时,只需要实现TestListener接口即可。
在TextUI方式中,是由ResultPrinter实现的.

代码骨架:

interface TestListener {
    
public void addError(Test test, Throwable t);
    
     
public void addFailure(Test test, AssertionFailedError t);  
    
     
public void endTest(Test test); 
    
    
public void startTest(Test test);
}

class ResultPrinter implements TestListener {
    
public void addError(Test test, Throwable t){
        System.out.println(
"ResultPrinter: addError");
    }
     
public void addFailure(Test test, AssertionFailedError t){
        System.out.println(
"ResultPrinter: addFailure");
    }
     
public void endTest(Test test){
        System.out.println(
"ResultPrinter: endTest");
    }
    
public void startTest(Test test){
        System.out.println(
"ResultPrinter: startTest");
    }
}


//concrete subject
class TestResult extends Object{

    
protected List<TestListener> fListeners;


    
public synchronized void addListener(TestListener listener) {
        fListeners.add(listener);
    }
    
    
public synchronized void removeListener(TestListener listener) {
        fListeners.remove(listener);
    }

    
//run函数中,可能调用startTest,addFailure,addError,endTest。
    
//而这四个函数会通知注册到改TestResult的所有的listeners
    protected void run(final TestCase test) {
        startTest(test);
        
        addFailure(test, e); 
//runProtected调用

        addError(test, e);  
//runProtected调用

        endTest(test);
    }

    
public void startTest(Test test) {
        
for (TestListener each : fListeners)
            each.startTest(test);
    }

       
//addFailure,addError,endTest省略
}

posted on 2011-02-28 11:08 baby-fly 阅读(311) 评论(0)  编辑 收藏 引用 所属分类: Design Pattern