1

初めての 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;
}
}
4

1 に答える 1

0

この変数がクラスにとって何を意味するか、または本当に必要かどうかを理解する必要がありますが、いいえをお勧めします。

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;
}
于 2013-11-05T14:38:55.873 に答える