我正在实现我的第一个Decorator模式。我想修饰的基类有一个在构造函数中初始化的成员变量。修饰的类也有这个成员变量(因为它是基类的后代)。我的问题是,我应该在装饰的类中也初始化这个成员变量,还是使用基类的成员变量(位于装饰的类中)?
下面是一些代码。我只是好奇Decorated1和Decorated2哪个更好?
public class Base{
private String memberVariable;
public Base(){
memberVariable = "";
}
public Base(String s){
memberVariable = s;
}
public String Description(){
//code here
}
}
public abstract class BaseDecorator(){
public abstract String Description();
}
public class Decorated1 extends BaseDecorator{
Base b;
public Decorated1(Base _b){
b = _b;
}
public String Description(){
//code here
}
public String getMemberVariable(){
return b.getMemberVariable();
}
}
public class Decorated2 extends BaseDecorator{
Base b;
public Decorated1(Base _b){
super(_b.getMemberVariable());
b = _b;
}
public String Description(){
//code here
}
public String getMembervariable(){
return memberVariable;
}
}发布于 2013-11-05 22:38:56
你必须弄清楚这个变量对你的类意味着什么,或者是否真的需要它,但我建议不要。
interface IObject{
//declare methods
void doSomething();
}
class ObjectA implements IObject{
private int variable;
public void doSomething(){
}
}
class DecorateObject implements IObject {
private IObject decoratedObject;
public void doSomething(){
decoratedObject.doSomething();
//do more things
}
}如果IObject是一个可绘制的元素,那么它将具有继承的x,y坐标,因此放在超类上是正确的,在本例中它将是一个抽象类。
interface IObject{
//declare methods
}
abstract class AbstractObject implements IObject{
private int xCoordinate;
}
class ObjectA extends AbstractObject {
}
class DecorateObject extends AbstractObject {
private IObject decoratedObject;
}https://stackoverflow.com/questions/19791392
复制相似问题