以下は私のテストコードです。場合は:スクロールバー、余分なサブビュー、背景色、このビューの特殊効果などのような、多くのデコレータをアタッチできるビューを作成しようとします。問題は私が見つけることですi1
とi2
は本当に私です私が必要とするものはwhatINeed1
とwhatINeed2
です。この場合、i1
とi2
のポイントは何ですか?この場合、彼らはジェネレータのようになりませんか?この場合、Decorator Designの使い方は?
私はobjective-cでテストしましたが、Javaサンプルコードをオンラインでコピーして調整したため、構文が間違っている可能性があります。
私が最初から間違っている場合は、それを指摘できますか?
public class Decorator {
abstract class I implements DefaultView { I render(); }
static class A implements I { public I render() { System.out.print('A'); } }
static abstract class D implements I {
private I core;
public D(I inner) { core = inner; }
public I render() { return core.render(); }
}
static class X extends D {
public X(I inner) { super(inner); }
public I render() {
I i = super.render();
i.setBackgroundColor();
}
}
static class Y extends D {
public Y(I inner) { super(inner); }
public I render() {
I i = super.render();
View v = new View();
//This is objective-c similar syntax,
//I don't know what's equivalent to Java
i.addSubview(v);
}
}
public static void main(String[] args) {
I i1 =new X(new A())
I i2= new Y(new X(new A()))};
I whatINeed1 = i1.render();
I whatINeed2 = i2.render;
}
デコレータのデザインについては、既存のコードを変更せずに追加機能を追加しています。下のモデルはどのように達成できますか?どのようにソースコードを変更せずに枠線とスクロールバーを描画するのですか?スクロールバーは元のウィンドウとやり取りする必要があります。私たちは、追加したい
public class PlayerScore{
void setScore(int);
}
すなわちデコレーターは通常X.
のソースコードを変更せずに、クラスX(メソッドはのは言わせ)に追加の「機能」を追加するために使用され
コメントのためのThx、 'Decoratorは通常、Xのソースコードを変更せずにクラスXに追加の「機能」を追加するために使用されます。私は自分の質問を編集しました。 ? –