Download presentation
Presentation is loading. Please wait.
1
Factory Method Pattern S. Yukita yukita@k.hosei.ac.jp
2
Factory Method2 Factory Method パターン クラス階層のどのサブクラスをインス タンス化するか。その決定をサブクラ スに委ねる。 付帯的な案件 – インスタンス生成に際して,取り巻く他の オブジェクト達との配線が必ず伴うとき, その作業もインスタンス生成に含めるのが よい。 –constructor に任せるのが酷な場合。 – 配線パターンが定石なら抽象化してしまう。 具体的なクラス名はそこでは使わない。
3
Factory Method3 例題のクラス図 Factory create [final] createProduct registerProduct Product use Creates IDCardFactory owners createProduct registerProduct getOwners IDCard owner use getOwner Creates framework
4
Factory Method4 例題の構成 framework パッケージ –Product.java –Factory.java idcard パッケージ –IDCard.java –IDCardFactory.java Main.java
5
Factory Method5 Product.java package framework; public abstract class Product { public abstract void use(); }
6
Factory Method6 Factory.java package framework; public abstract class Factory { public final Product create(String owner) { Product p = createProduct(owner); registerProduct(p); return p; } protected abstract Product createProduct(String owner); protected abstract void registerProduct(Product product); }
7
Factory Method7 IDCard.java package idcard; import framework.*; public class IDCard extends Product { private String owner; IDCard(String owner) { System.out.println(owner + " のカードを作ります。 "); this.owner = owner; } public void use() { System.out.println(owner + “ のカードを使います。 ”); } public String getOwner() {return owner;} }
8
Factory Method8 IDCardFactory.java package idcard; import framework.*; import java.util.*; public class IDCardFactory extends Factory { private Vector owners = new Vector(); protected Product createProduct(String owner) { return new IDCard(owner); } protected void registerProduct(Product product) { owners.add(((IDCard)product).getOwner()); } public Vector getOwners() {return owners;} }
9
Factory Method9 Main.java import framework.*; import idcard.*; public class Main { public static void main(String[] args) { Factory factory = new IDCardFactory(); Product card1 = factory.create(" 結城浩 "); Product card2 = factory.create(" とむら "); Product card3 = factory.create(" 佐藤花子 "); card1.use(); card2.use(); card3.use(); }
10
Factory Method10 実行結果 結城浩のカードを作ります。 とむらのカードを作ります。 佐藤花子のカードを作ります。 結城浩のカードを使います。 とむらのカードを使います。 佐藤花子のカードを使います。
11
Factory Method11 パターン Creator create factoryMethod Product method1 method2 method3 Creates ConcreteCreator factoryMethod ConcreteProduct method1 method2 method3 Creates framework
12
Factory Method12 例題の解釈 Factory create [final] createProduct registerProduct Product use Creates IDCardFactory owners createProduct registerProduct getOwners IDCard owner use getOwner Creates 定型配線パ ターン override 不可 要素的アク ション 抽象的 具体的
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.