工廠方法模式又稱工廠模式,也叫虛擬構(gòu)造器模式或多態(tài)工廠模式,屬于類的創(chuàng)建型模式。在工廠方法模式中,父類負(fù)責(zé)定義創(chuàng)建對(duì)象的公共接口,而子類則負(fù)責(zé)生成具體的對(duì)象,這樣做的目的是將類的實(shí)例化操作延遲到子類中完成,即由子類來(lái)決定究竟應(yīng)該實(shí)例化哪一個(gè)類。
示例:多文檔系統(tǒng)
using System;
using System.Collections;
namespace MultiPage
{
//產(chǎn)品基類
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();
}
//派生類
//具體產(chǎn)品類 -- 技能頁(yè)
class SkillsPage : Page
{
}
//具體產(chǎn)品類 -- 教育頁(yè)
class EducationPage : Page
{
}
//具體產(chǎn)品類 -- 經(jīng)驗(yàn)頁(yè)
class ExperiencePage : Page
{
}
//具體產(chǎn)品類 -- 介紹頁(yè)
class IntroductionPage : Page
{
}
//具體產(chǎn)品類 -- 結(jié)果頁(yè)
class ResultPage : Page
{
}
//具體產(chǎn)品類 -- 結(jié)論頁(yè)
class ConclusionPage : Page
{
}
//具體產(chǎn)品類 -- 總結(jié)頁(yè)
class SummaryPage : Page
{
}
//具體產(chǎn)品類 -- 文獻(xiàn)頁(yè)
class BibliographyPage : Page
{
}
//具體工廠類 -- 個(gè)人簡(jiǎn)歷,包括技能、教育、經(jīng)驗(yàn)
class Resume : Document
{
//Factory Method 實(shí)現(xiàn)
public override void CreatePages()
{
pages.Add(new SkillsPage());
pages.Add(new EducationPage());
pages.Add(new ExperiencePage());
}
}
//具體工廠類 -- 報(bào)告,包括介紹、結(jié)果、結(jié)論、總結(jié)、文獻(xiàn)
class Report : Document
{
//Factory Method 工廠方法實(shí)現(xiàn)
public override void CreatePages()
{
pages.Add(new IntroductionPage());
pages.Add(new ResultPage());
pages.Add(new ConclusionPage());
pages.Add(new SummaryPage());
pages.Add(new BibliographyPage());
}
}
//客戶應(yīng)用測(cè)試
class Client
{
[STAThread]
static void Main(string[] args)
{
Document[] docs = new Document[2];
//在構(gòu)造函數(shù)就調(diào)用了Factory Method,創(chuàng)建兩種文檔
docs[0] = new Resume();
docs[1] = new Report();
//顯示文檔內(nèi)容
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)
評(píng)論(1) 編輯 收藏 引用