Factory Method Pattern S. Yukita [email protected].
-
Upload
gervase-nelson -
Category
Documents
-
view
214 -
download
1
Transcript of Factory Method Pattern S. Yukita [email protected].
![Page 2: Factory Method Pattern S. Yukita yukita@k.hosei.ac.jp.](https://reader030.fdocuments.net/reader030/viewer/2022013011/56649f395503460f94c55bae/html5/thumbnails/2.jpg)
Factory Method 2
Factory Method パターン
• クラス階層のどのサブクラスをインスタンス化するか。その決定をサブクラスに委ねる。
• 付帯的な案件–インスタンス生成に際して,取り巻く他のオブジェクト達との配線が必ず伴うとき,その作業もインスタンス生成に含めるのがよい。
– constructor に任せるのが酷な場合。– 配線パターンが定石なら抽象化してしまう。
• 具体的なクラス名はそこでは使わない。
![Page 3: Factory Method Pattern S. Yukita yukita@k.hosei.ac.jp.](https://reader030.fdocuments.net/reader030/viewer/2022013011/56649f395503460f94c55bae/html5/thumbnails/3.jpg)
Factory Method 3
例題のクラス図Factory
create [final]
createProduct
registerProduct
Product
use
Creates
IDCardFactory
owners
createProduct
registerProduct
getOwners
IDCard
owner
use
getOwner
Creates
framework
![Page 4: Factory Method Pattern S. Yukita yukita@k.hosei.ac.jp.](https://reader030.fdocuments.net/reader030/viewer/2022013011/56649f395503460f94c55bae/html5/thumbnails/4.jpg)
Factory Method 4
例題の構成
• framework パッケージ– Product.java– Factory.java
• idcard パッケージ– IDCard.java– IDCardFactory.java
• Main.java
![Page 5: Factory Method Pattern S. Yukita yukita@k.hosei.ac.jp.](https://reader030.fdocuments.net/reader030/viewer/2022013011/56649f395503460f94c55bae/html5/thumbnails/5.jpg)
Factory Method 5
Product.java
package framework;
public abstract class Product {
public abstract void use();
}
![Page 6: Factory Method Pattern S. Yukita yukita@k.hosei.ac.jp.](https://reader030.fdocuments.net/reader030/viewer/2022013011/56649f395503460f94c55bae/html5/thumbnails/6.jpg)
Factory Method 6
Factory.javapackage 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);
}
![Page 7: Factory Method Pattern S. Yukita yukita@k.hosei.ac.jp.](https://reader030.fdocuments.net/reader030/viewer/2022013011/56649f395503460f94c55bae/html5/thumbnails/7.jpg)
Factory Method 7
IDCard.javapackage 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;}
}
![Page 8: Factory Method Pattern S. Yukita yukita@k.hosei.ac.jp.](https://reader030.fdocuments.net/reader030/viewer/2022013011/56649f395503460f94c55bae/html5/thumbnails/8.jpg)
Factory Method 8
IDCardFactory.javapackage 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;}
}
![Page 9: Factory Method Pattern S. Yukita yukita@k.hosei.ac.jp.](https://reader030.fdocuments.net/reader030/viewer/2022013011/56649f395503460f94c55bae/html5/thumbnails/9.jpg)
Factory Method 9
Main.javaimport 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();
}
}
![Page 10: Factory Method Pattern S. Yukita yukita@k.hosei.ac.jp.](https://reader030.fdocuments.net/reader030/viewer/2022013011/56649f395503460f94c55bae/html5/thumbnails/10.jpg)
Factory Method 10
実行結果
結城浩のカードを作ります。とむらのカードを作ります。佐藤花子のカードを作ります。結城浩のカードを使います。とむらのカードを使います。佐藤花子のカードを使います。
![Page 11: Factory Method Pattern S. Yukita yukita@k.hosei.ac.jp.](https://reader030.fdocuments.net/reader030/viewer/2022013011/56649f395503460f94c55bae/html5/thumbnails/11.jpg)
Factory Method 11
パターンCreator
create
factoryMethod
Product
method1
method2
method3
Creates
ConcreteCreator
factoryMethod
ConcreteProduct
method1
method2
method3
Creates
framework
![Page 12: Factory Method Pattern S. Yukita yukita@k.hosei.ac.jp.](https://reader030.fdocuments.net/reader030/viewer/2022013011/56649f395503460f94c55bae/html5/thumbnails/12.jpg)
Factory Method 12
例題の解釈Factory
create [final]
createProduct
registerProduct
Product
use
Creates
IDCardFactory
owners
createProduct
registerProduct
getOwners
IDCard
owner
use
getOwner
Creates
定型配線パターン
override不可要素的アクション
抽象的
具体的