首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >装饰器模式成员变量

装饰器模式成员变量
EN

Stack Overflow用户
提问于 2013-11-05 22:33:15
回答 1查看 996关注 0票数 1

我正在实现我的第一个Decorator模式。我想修饰的基类有一个在构造函数中初始化的成员变量。修饰的类也有这个成员变量(因为它是基类的后代)。我的问题是,我应该在装饰的类中也初始化这个成员变量,还是使用基类的成员变量(位于装饰的类中)?

下面是一些代码。我只是好奇Decorated1和Decorated2哪个更好?

代码语言:javascript
复制
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;
}
}
EN

回答 1

Stack Overflow用户

发布于 2013-11-05 22:38:56

你必须弄清楚这个变量对你的类意味着什么,或者是否真的需要它,但我建议不要。

代码语言:javascript
复制
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坐标,因此放在超类上是正确的,在本例中它将是一个抽象类。

代码语言:javascript
复制
interface IObject{
    //declare methods
}

abstract class AbstractObject implements IObject{
    private int xCoordinate;
}

class ObjectA extends AbstractObject {

}

class DecorateObject extends AbstractObject {
    private IObject decoratedObject;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19791392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档