我使用设计模式已经有一段时间了,并且一直将其称为“责任链模式”,但现在我意识到存在差异,这样做可能不合适。所以我的问题是 1,“下面是这种模式的一个实例,还是应该将其称为其他东西?”,以及 2,“我有什么理由更喜欢传统方式吗?”。
在开发软件时,我经常使用以下模式。我有一个定义functor的接口,类似这样。
interface FooBar{
boolean isFooBar( Object o );
}
这些通常是搜索、过滤或处理类;通常类似于Comparator。实现方法通常是功能性的(即无副作用)。最终,我发现自己创建了一个如下所示的接口实现:
class FooBarChain implements FooBar{
FooBar[] foobars;
FooBarChain( FooBar... fubars ){
foobars = fubars;
}
boolean isFooBar( Object o ){
for( FooBar f : foobars )
if( f.isFooBar( o ) )
return true;
return false;
}
}
它也不总是布尔值——我也将这种模式与可变对象一起使用——但总是存在短路条件(例如返回真,字符串为空字符串,设置标志等)。
到目前为止,我通常将其称为“责任链”模式,考虑到从基类继承的问题是一个实现细节。但是,今天我意识到了一个重要的区别:链条上的物体不能打断链条的其余部分。实现没有办法说“这是错误的,我可以保证它在任何情况下都是错误的”(nb:短路仅在 上true
)。
那么,这应该被称为责任链模式以外的东西吗?在使用这种方法而不是让实例传递消息的传统方法时,我是否应该考虑任何顾虑或问题。