Factory Method パターンについて読んでいます。
ランタイムまたはその他の状態に基づいて実装をStoreFactory#getStore()
返す、単一のファクトリ クラスがある場合を理解できます。Store
しかし、読むことから (たとえば、このリンク)、他のファクトリ クラスが拡張される抽象ファクトリ クラスを作成する人々の一般的なパターンがあるようです。
public abstract class AbstractFactory {
public abstract Store getStore(int store);
}
public class StoreFactoryA extends AbstractFactory {
public Store getStore(int Store) {
if(Store == 1) { return new MyStoreImplA(); }
if(Store == 2) { return new MyStoreImplB(); }
}
}
public class StoreFactoryB extends AbstractFactory {
public Store getStore(int Store) {
if(Store == 1) { return new MyStoreImplC(); }
if(Store == 2) { return new MyStoreImplD(); }
}
}
public class Runner {
public static void main(String[] args) {
AbstractFactory storeFactory = new StoreFactoryA();
Store myStore = storeFactory.getStore(1);
}
}
私の例は不自然ですが、前述のリンクのモデルです。
この実装は、私にはニワトリの卵のように思えます。ファクトリ メソッド パターンを使用して、クライアント コードでクラス タイプを指定する必要をなくしますが、クライアント コードは使用する正しいファクトリを選択的に選択する必要がありStoreFactoryA
ますStoreFactoryB
。
ここで抽象クラスを使用する理由は何ですか?