上一節的模版方法是在父類建立處理邏輯的大綱骨架,而在子類補充具體的處理內容,如果把這個Pattern應用在產生對象實例方面,就是本節的學習重點,工廠模式。
這個程序示例主要是建立一個生產身份證的工廠。
程序包 | 名稱 | 說明 |
framework | Product | 僅定義抽象方法use的抽象類 |
framework | Factory | 實現方法create的抽象類 |
idcard | IDCard | 實現方法use的抽象類 |
idcard | IDCardFactory | 實現方法createProduct,egisterProduct的類 |
Main | 測試類 |
- package framework;
- public abstract class Product {
- public abstract void use();
- }
- }
- package framwork ;
- 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);
- }
- 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;
- }
- }
- package idcard;
- import frameWork.*;
- import java.util.*;
- public class IDCardFactory extrends Factory {
- private Vector owners = new Vector();
- protected Product createrProduct (String owner) {
- return new IDCard(owner);
- }
- protected void registerProduct(Product product) {
- owners.add(((IDCard)product).getOwner());
- }
- public Vector getOwner() {
- return owners;
- }
- }
- import framwork.*;
- import idcard.*;
- public class Main {
- public static void main(String args[]) {
- Factory factory = new IDCardFactory();
- Product card1 = factory.create("qingzi2534");
- Product card2 = factory.create("javaeye");
- card1.use();
- card2.use();
- }
- }