08/09/07 11:30:08
>>286
AFは一連のオブジェクト群を作成して結果的に一つのオブジェクトを構成しようとするが、
FMはその一連のオブジェクト群から成る一つのオブジェクトを生成する。
FMでは生成され得るオブジェクトのあらゆるパターンに対してそれぞれクラスを準備しておくが、
AFはオブジェクトの各パーツ毎にどれを選択するかをファクトリが選択する。
ファクトリを使わず露骨にnewするということは実装に対してプログラミングすることになりOOの原則に反する。
もちろん、どこかの段階でnewしなければならないが、それならnew専用クラスを作ることで
新たにnewしたいものがでてきてもそのクラスをいじるだけですむので保守が楽。
例えば、クラスAでB1をnewしてbで参照することにする。bをインターフェースや抽象型にすると、bを使って何かする部分のコードは不変にできる。
ここで将来的に不変でなくなる可能性があるのはbが実際に何を参照するかということ。
こういう不変な部分を切り離してカプセル化することで、その部分をいじるだけでコードを拡張できる。
将来、同じインターフェースや抽象型を実装するB1,B2,B3がでてきても、bをその型で宣言すればそのクラスをいじる必要はなくなる。