GUI コンポーネントを互いに入れ子にすることをサポートする GUI フレームワークがあるとします。他の GUI コンポーネントを含むことができる任意の GUI コンポーネントの基底クラスを Container と呼びましょう。
Container soley をサブクラス化してデフォルトの構成を提供することは問題ありませんか?それとも、サブクラス化によって常に追加/オーバーライド/実装された動作を提供する必要がありますか? たとえば、画面幅の 100% を埋め、高さが 50 ピクセルで、コンポーネントを水平に配置する ButtonBar コンテナーを作成したいとします。そのようなコンテナーを構成するには、次の 2 つの例のいずれかを実行できます。
Container container = new Container();
container.PercentWidth = 100;
container.Height = 50;
container.Layout = Layout.Horizontal;
// use container
または、(これが私の質問です)、これを行っても問題ありませんか?
public class ButtonBar : Container
{
public ButtonBar()
{
PercentWidth = 100;
Height = 50;
Layout = Layout.Horizontal;
}
}
ButtonBar buttonBar = new ButtonBar();
// use buttonBar
ButtonBar にはコンテナーに対する追加機能はなく、コンテナー メソッドをオーバーライドしません。これは、Container を ButtonBar として簡単に構成できるようにするだけです。
編集
widgetFactory.CreateButtonBar(); などのコンテナを返すファクトリを使用するのがおそらく最善であると結論付けました。このようにして、抽象型 (コンテナ) を使用することになり、型の「セットアップ」をファクトリにカプセル化します。これは、ファクトリが行うことです。
public class WidgetFactory
{
public Container CreateButtonBar()
{
Container container = new Container();
container.PercentWidth = 100;
container.Height = 50;
container.Layout = Layout.Horizontal;
return container;
}
}