我试图了解用于JUnit的TestRunner(package junit.textui)类的设计模式。 TestRunner类正在扩展一个监听器 并有听众的参考。
如果是Observer设计模式,那为什么呢 扩展听众?它应该只有听众的参考。
答案 0 :(得分:3)
junit.textui.TestRunner
符合Observer pattern,但它是观察者,而不是主题。至少,它将成为观察者 - 它不再是。
JUnit公开TestListener接口:TestResult类运行TestCase,调用自己的方法startTest
和endTest
。 TestResult还包含一个TestListener实例列表,并在测试开始或结束时通知所有实例。这是典型的Observer模式:TestResult是主题,通知其TestListener实例的集合,其中一个可能是TestRunner将自己添加到列表中。
那就是TestRunner doesn't currently add itself as a listener to TestResult,并且其所需的testStarted
,testEnded
和testFailed
方法都是空的。相反,它会在监听器列表中添加ResultPrinter;我认为这在某种程度上是由TestRunner计算出来的。
因此,TestRunner被设置为Observer,但它不再像一个。总而言之,这实际上证明了设计模式的优势:它允许通过对这些特定接口进行编码来重构代码并分离行为。