■メリット
あるクラスを使うエンドユーザは、そのクラスがどのクラスと相関があるかを覚えてくれているので、
意識することなく使える。
■実装例
/*User.java*/
public class User {
public static void main(String[] args) {
Factory factory = new ConcreteFactory(); //ConcreteFactory側で、どのクラスをペアにするか把握しているため、利用者側で意識する必要がない。
factory.what_factory();
Product product = factory.factoryMethod();
product.method();
}
}
/*Factory.java*/
public abstract class Factory {
public abstract void what_factory(); //分かりやすさのため追加。
public abstract Product factoryMethod(); //FactoryMethod本体
}
/*Product.java*/
public abstract class Product {
public abstract void method(); //商品ごとに振る舞いを変えて欲しい機能
}
/*ConcreteFactory.java*/
public class ConcreteFactory extends Factory{
public void what_factory() {
System.out.println("このFactoryはConcreteProductAとの関係があります");
}
public Product factoryMethod(){
return new ConcreteProductA(); //Factory自身はどのクラスと関係があるかを把握している。ProductやUserは知らなくてOK。何を返すのかを分岐させたりすることもできる。
}
}
/*ConcreteProductA.java*/
public class ConcreteProductA extends Product{
public void method(){
System.out.println("productAの機能です");
}
}
最終更新:2021年07月07日 12:33