これは、別の質問に対するこの回答が動機です。
ビルダーパターン)、特に、オプションの初期化パラメータとの複合体の初期化を簡略化するために使用されます。しかし、相互に排他的な構成を適切に管理する方法がわかりません。
ここにImage
クラスがあります。 Image
ファイルまたはサイズから初期化できますが、両方から初期化することはできません。コンストラクタを使用してこの相互排除を強制することは、クラスが十分に単純な場合に明らかです。
public class Image
{
public Image(Size size, Thing stuff, int range)
{
// ... initialize empty with size
}
public Image(string filename, Thing stuff, int range)
{
// ... initialize from file
}
}
Image
ビルダーパターンが役立つように実際に十分に構成可能であると想定すると、突然これが可能になる可能性があります。
Image image = new ImageBuilder()
.setStuff(stuff)
.setRange(range)
.setSize(size) // <---------- NOT
.setFilename(filename) // <---------- COMPATIBLE
.build();
これらの問題は、コンパイル時ではなく実行時に検出する必要がありますが、これは最悪の事態ではありません。問題は、ImageBuilder
クラス内でこれらの問題を一貫して包括的に検出すると、特にメンテナンスに関して複雑になる可能性があることです。
ビルダーパターンで互換性のない構成に対処するにはどうすればよいですか?