設計模式之工廠方法Factory Method

上一節的模版方法是在父類建立處理邏輯的大綱骨架,而在子類補充具體的處理內容,如果把這個Pattern應用在產生對象實例方面,就是本節的學習重點,工廠模式。

這個程序示例主要是建立一個生產身份證的工廠。

程序包 名稱 說明
framework Product 僅定義抽象方法use的抽象類
framework Factory 實現方法create的抽象類
idcard IDCard 實現方法use的抽象類
idcard IDCardFactory 實現方法createProduct,egisterProduct的類
  Main 測試類

Product抽象類
  1. package  framework;   
  2. public abstract class Product {   
  3.    public  abstract void use();   
  4.  }   
  5. }  
Factory 抽象類
  1. package  framwork ;   
  2. public abstract  class Factory {   
  3.  public  final  Product create(String owner) {   
  4.    Product  p  = createProduct(owner);   
  5.    registerProduct(p);   
  6.    return p;   
  7.  }   
  8.  protected  abstract Product  createProduct(String owner);   
  9.  protected abstract void registerProduct(Product product);   
  10. }  
IDCard 子類
  1. package  idcard;   
  2. import framework.*;   
  3. public class IDCard extends Product {   
  4.   private  String owner;   
  5.   IDCard(String owner) {   
  6.     System.out.println("建立"+owner+"的卡。");   
  7.     this.owner = owner ;   
  8.     }   
  9.   public void use () {   
  10.     System.out.println("使用"+owner + " 的卡。");   
  11.   }   
  12.   public String getOwner() {   
  13.     return owner;   
  14.   }   
  15. }  
IDCardFactory 子類
  1. package idcard;   
  2. import frameWork.*;   
  3. import java.util.*;   
  4. public class IDCardFactory extrends Factory {   
  5.    private Vector owners = new Vector();   
  6.    protected  Product createrProduct (String owner) {   
  7.      return new IDCard(owner);   
  8.    }   
  9.    protected void registerProduct(Product product) {   
  10.      owners.add(((IDCard)product).getOwner());   
  11.    }   
  12.    public Vector getOwner() {   
  13.      return owners;   
  14.  }   
  15. }   
Main測試類
  1. import framwork.*;   
  2. import idcard.*;   
  3. public class Main {   
  4.   public static void main(String args[]) {   
  5.     Factory factory = new IDCardFactory();   
  6.     Product card1 = factory.create("qingzi2534");   
  7.     Product card2 = factory.create("javaeye");   
  8.     card1.use();   
  9.     card2.use();   
  10.  }   
  11. }  
發佈了1 篇原創文章 · 獲贊 0 · 訪問量 3922
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章