工廠方法模式又稱工廠模式,也叫虛擬構造器模式或多態工廠模式,屬于類的創建型模式。在工廠方法模式中,父類負責定義創建對象的公共接口,而子類則負責生成具體的對象,這樣做的目的是將類的實例化操作延遲到子類中完成,即由子類來決定究竟應該實例化哪一個類。
示例:多文檔系統
using System;
using System.Collections;
namespace MultiPage
{
//產品基類
abstract class Page
{
}
//工廠抽象類
abstract class Document
{
protected ArrayList pages = new ArrayList();
public Document()
{
this.CreatePages();
}
public ArrayList Pages
{
get { return pages; }
}
//Factory Method
abstract public void CreatePages();
}
//派生類
//具體產品類 -- 技能頁
class SkillsPage : Page
{
}
//具體產品類 -- 教育頁
class EducationPage : Page
{
}
//具體產品類 -- 經驗頁
class ExperiencePage : Page
{
}
//具體產品類 -- 介紹頁
class IntroductionPage : Page
{
}
//具體產品類 -- 結果頁
class ResultPage : Page
{
}
//具體產品類 -- 結論頁
class ConclusionPage : Page
{
}
//具體產品類 -- 總結頁
class SummaryPage : Page
{
}
//具體產品類 -- 文獻頁
class BibliographyPage : Page
{
}
//具體工廠類 -- 個人簡歷,包括技能、教育、經驗
class Resume : Document
{
//Factory Method 實現
public override void CreatePages()
{
pages.Add(new SkillsPage());
pages.Add(new EducationPage());
pages.Add(new ExperiencePage());
}
}
//具體工廠類 -- 報告,包括介紹、結果、結論、總結、文獻
class Report : Document
{
//Factory Method 工廠方法實現
public override void CreatePages()
{
pages.Add(new IntroductionPage());
pages.Add(new ResultPage());
pages.Add(new ConclusionPage());
pages.Add(new SummaryPage());
pages.Add(new BibliographyPage());
}
}
//客戶應用測試
class Client
{
[STAThread]
static void Main(string[] args)
{
Document[] docs = new Document[2];
//在構造函數就調用了Factory Method,創建兩種文檔
docs[0] = new Resume();
docs[1] = new Report();
//顯示文檔內容
foreach (Document document in docs)
{
Console.WriteLine("\n" + document + " -------------- ");
foreach (Page page in document.Pages)
{
Console.WriteLine(" " + page);
}
}
Console.Read();
}
}
}
posted on 2008-10-07 13:46
zhanghaibin 閱讀(426)
評論(1) 編輯 收藏 引用