FactoryMethodパターンがどういったものかについては理解したのですがその利点がわかりません。
次のようにパーツが定義されていて、
//Factory.java public abstract class Factory{ public abstract Product factoryMethod(); // abstract キーワードが必要 public final Product create(){ // 抽象クラスの中にメソッドを定義することもできる Product product = factoryMethod(); return product; } }
//Product.java public abstract class Product{ public abstract void method1(); public abstract void method2(); }
//ConcreteFactory.java public class ConcreteFactory extends Factory{ public Product factoryMethod(){ return new ConcreteProduct(); } }
//ConcreteProduct.java public class ConcreteProduct extends Product{ public void method1(){ System.out.println("method1"); } public void method2(){ System.out.println("method2"); } }
次のように使われていたところで疑問が生じました。
public class Client{ public static void main(String[] args){ Factory factory = new ConcreteFactory(); //本来ならFactoryクラスを継承したクラスがたくさんあってその中から一つ選んで生成するはず。(この考えが違うのか?) Product product = factory.factoryMethod();//なぜそのままnew ConcreteProduct()としない? /* 結局Factory側のインスタンスを条件に合わせて生成しているのだから意味がないのでは? 何らかの条件分岐によってその都度「どのFactoryを宣言するか」を決めないと機能しないならば、 何らかの条件分岐によってその都度「どのProductを生成するか(newするか)」を決めるのと同じではないか? */ product.method1(); product.method2(); } }
FactoryMethodパターンへの理解が浅いからこのような疑問が生じているのか、それとも他にこのFactoryMethodパターンが役に立つタイミングがあるのかわからないのですが、どうにもFactoryMethodの恩恵がわかりません。
FactoryMethodパターンを使ってその都度生成するFactoryを変えるのと、FactoryMethodパターンを使わずその都度生成するProductを変えるのがどう違うか。また、FactoryMethodパターンを使うのの何がいいのかがわからないのでご教授いただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/27 01:42
2018/06/27 01:43
2018/06/27 01:47