假设有一个接口Subject.
interface Subject { void request(); }
Run Code Online (Sandbox Code Playgroud)
我们有一个RealSubject类.假设我们想要增强RealSubject,我们可以使用包裹RealSubject的代理模式:
class Proxy implements Subject {
private RealSubject ref;
void request(){ ... }
}
Run Code Online (Sandbox Code Playgroud)
或者我们可以扩展RealSubject并覆盖该方法
class EnhancedSubject extends RealSubject {
@Override
void request() { ... }
}
Run Code Online (Sandbox Code Playgroud)
哪种方法更好?我知道Liskov原则; 让我们假设EnhancedSubject满足Liskov原则.你还在考虑继承吗?
如果没有接口Subject(即,RealSubject没有实现任何接口),似乎"inherit and override"是唯一的选项,因为在Proxy模式中没有要实现的接口.如果没有主题界面,您仍然可以应用代理模式吗?
我必须维护承包商的代码.它有这个"有趣"的片段:
String webServicesValue =
webResponse.substring(webResponse.indexOf("<" + fieldName + ">") +
fieldName.length() + 2,
webResponse.indexOf("</" + fieldName + ">"));
Run Code Online (Sandbox Code Playgroud)
我花了几分钟才明白他想要做什么.
它似乎是一个WTF代码,但我的同事建议,"如果没有破坏,请不要修复它." 我想知道这段代码是否会失败.它似乎工作到目前为止,我真的不能想到一个测试用例失败了.
谢谢,