9

私はパターンをデザインするのが初めてで、decorator pattern を使用して 1 から 10 までの数字を出力するように求められました。些細なことで申し訳ありませんが、学ぶ必要があります。これは私がこれまでに持っているものです:

インターフェース

public interface NextNumber {
    public int getNextNumber(int n);
}

抽象クラス

abstract public class PrintNumbers implements NextNumber {
    protected final NextNumber next;
    protected int num;

    public PrintNumbers(NextNumber next, int num)
    {
        this.next = next;
        this.num = num;
    }

    public int getNextNumber(int num)
    {
        return num+1;
    }
}

DecoratorClass

public class DecoratorCount extends PrintNumbers {
    public DecoratorCount(NextNumber next, int num)
    {
        super(next, num);
    }

    public static void main(String[] args)
    {
        int i = 0;
    }
}

進むべき道がわからない、あるいは正しい道を進んでいるかどうかさえわからない。誰かが光を当てることができますか?

4

2 に答える 2

6

まず、デコレーター クラスは、デコレートするが同じインターフェイスを実装するクラスを拡張する必要はありません。

このウィキペディアのページを見てください。

したがって、次のようにデコレータを修正できます。

// The interface
public interface NextNumber {

     public int getNextNumber();
}

// The class to decorate
public class PrintNumbers implements NextNumber {

    protected int num;

    public PrintNumbers(int startFrom)
    {
        this.num = startFrom;
    }

    public int getNextNumber()
    {
        return num++;
    }
}

// The abstract decorator
public abstract class DecoratorCount implements NextNumber {

    private PrintNumbers pn;

    public DecoratorCount(PrintNumbers pn)
    {
       this.pn = pn;
    }
}

次に、たとえば、数値に2を掛けることができます。

public class DoubleDecoratorCount extends DecoratorCount {

    public DecoratorCount(PrintNumbers pn)
    {
        super(pn);
    }

    public int getNextNumber()
    {    
        return pn.getNextNumber() * 2;
    }
}

そして、この方法でデコレータをテストできます

public class Test {

    public static void main (String[] args) {
        PrintNumbers pn = new PrintNumbers(0);
        DoubleDecoratorCount decorator = new DoubleDecoratorCount(pn);
        for (int i = 0 ; i < 5 ; ++i)
            System.out.println("value: " + decorator.getNextNumber());
    }
}

この時点で、必要なすべてのデコレータを記述できます。

  • 3 を掛けます。
  • 結果を手紙で書く;
  • 結果を 16 進数で書き込むには;
  • 等...
于 2012-04-13T07:13:31.810 に答える
3

まず、装飾が必要な何かが必要です。次に、その何かのデコレータが必要です。基本クラスとデコレータの両方のクラスは具体的なクラスであり、直接使用できます。

1 から 10 までのカウンターを装飾することはあまり意味がありません (数字は常に美しい ;) )。ただし、フォーマットされていない数値を出力する基本クラスを実装してから、出力結果に美しさを追加するデコレータを実装することができます。

于 2012-04-13T07:10:59.797 に答える