【发布时间】:2014-02-14 10:25:57
【问题描述】:
我想问你一些关于这个java场景的提示:
我有一个名为Sequence 的简单接口,它执行一些基本操作。现在我想在一个单独的类中实现一些额外的方法,称为SequenceWrapper,它实现了上面定义的Sequence。这是一些看起来像我的真实代码的示例代码:
public interface Sequence {
public void methodOne();
public int methodTwo();
}
public abstract class SequenceWrapper implements Sequence {
private wrappedSequence = null;
public SequenceWrapper(Sequence sequence){
this.wrappedSequence = sequence;
}
public void methodOne(){
wrappedSequence.methodOne();
}
public int methodTwo(){
return wrappedSequence.methodTwo();
}
}
public class ConcreteWrapper extends SequenceWrapper {
public ConcreteWrapper(Sequence sequence){
super(sequence);
}
// Just an example
public int addMethodOne(){
int a = super.methodTwo();
return a + 3;
}
}
现在,如果我想用另一种方法(比如“addMethodTwo()”)实现一个类,我可以简单地扩展“ConcreteWrapper”类并只添加新方法:
public class ConcreteWrapperTwo extends ConcreteWrapper {
public ConcreteWrapperTwo(Sequence sequence){
super(sequence);
}
public int addMethodTwo(){
int a = super.methodTwo();
return a + 30;
}
}
你怎么看?这段代码是正确的还是另一种策略更可取?
提前致谢
【问题讨论】:
-
虽然我基本上同意 Carlos Robles 的回答,但您在那里描述的似乎只是装饰者模式en.wikipedia.org/wiki/Decorator_pattern - 这是有道理的,但它应该(像所有模式一样)得到验证它确实适合特定的应用案例
-
是的,@Marco13,我同意这一点,如果您在我的回答中查看 cmets,我也提到了它,但可能更难实现,正如您所说,首先它必须是检查它是否真的适合当前情况。
-
@Carlos Robles 是的,我注意到您提到了它,但想在此处添加此链接,以防提问者(或其他阅读问题的人)不知道“装饰模式”是特别是众所周知的模式,并且该关键字可用于在网络上找到相当多的资源,显示其优点/缺点和可能的用例。
-
@Marco13 是的,这很有用!
-
据我所知,这不是“标准”装饰器模式,而且我的案例不适合装饰器模式案例(我需要向类添加新功能而不是“扩展”装饰类的功能,例如 Coffee Milk 场景)
标签: java design-patterns wrapper