我有一个第三方对象,它使用从Java.lang.Object继承的toString方法。这种方法很无用。但是我想不出一个干净的设计来覆盖这种行为。以下不同的方法。
问题:如果原始对象内部的任何调用调用toString并检查返回的String,它们现在将中断。我不想打破现有的对象,也不想假设第三方代码的清洁度。
问题:我既不能要求所有内容都传递给createString方法,也不能直接调用toString(这在大型代码库中会很荒谬),也不能轻易记住哪些对象应该被传递,因为它们有自定义逻辑。
有没有人有一种感觉干净的设计模式?
答案 0 :(得分:5)
只需在util类上使用静态方法:
public class MyUtils {
public static String toString(My3rdPartyClass obj) {
// impl here
}
}
答案 1 :(得分:5)
我真的很喜欢波希米亚人的回答。
考虑到这一点,解决它的OOP方法将是
class My3rdPartyClassFormatter {
private My3rdPartyClass data;
public My3rdPartyClassFormatter(My3rdPartyClass d) { this.data = d; }
public String toString() {
// impl here
}
}
答案 2 :(得分:2)
使用proxy。您的调用处理程序将拦截对第三方对象的所有调用。在大多数情况下,它只会通过它们。但是,请实现自己的toString逻辑。
InvocationHandler handler = new InvocationHandler
{
private ThirdParty thrd ;
public Object invoke ( Object proxy , Method method , Object [ ] args ) throws Throwable
{
if ( method . getName().equals ( "toString" ) )
{
return "useful string" ;
}
else
{
return method . invoke ( thrd , args ) ;
}
}
}