工廠方法模式又稱(chēng)工廠模式,也叫虛擬構(gòu)造器模式或多態(tài)工廠模式,屬于類(lèi)的創(chuàng)建型模式。在工廠方法模式中,父類(lèi)負(fù)責(zé)定義創(chuàng)建對(duì)象的公共接口,而子類(lèi)則負(fù)責(zé)生成具體的對(duì)象,這樣做的目的是將類(lèi)的實(shí)例化操作延遲到子類(lèi)中完成,即由子類(lèi)來(lái)決定究竟應(yīng)該實(shí)例化哪一個(gè)類(lèi)。
示例:多文檔系統(tǒng)
using System;
using System.Collections;
namespace MultiPage
{
//產(chǎn)品基類(lèi)
abstract class Page
{
}
//工廠抽象類(lèi)
abstract class Document
{
protected ArrayList pages = new ArrayList();
public Document()
{
this.CreatePages();
}
public ArrayList Pages
{
get { return pages; }
}
//Factory Method
abstract public void CreatePages();
}
//派生類(lèi)
//具體產(chǎn)品類(lèi) -- 技能頁(yè)
class SkillsPage : Page
{
}
//具體產(chǎn)品類(lèi) -- 教育頁(yè)
class EducationPage : Page
{
}
//具體產(chǎn)品類(lèi) -- 經(jīng)驗(yàn)頁(yè)
class ExperiencePage : Page
{
}
//具體產(chǎn)品類(lèi) -- 介紹頁(yè)
class IntroductionPage : Page
{
}
//具體產(chǎn)品類(lèi) -- 結(jié)果頁(yè)
class ResultPage : Page
{
}
//具體產(chǎn)品類(lèi) -- 結(jié)論頁(yè)
class ConclusionPage : Page
{
}
//具體產(chǎn)品類(lèi) -- 總結(jié)頁(yè)
class SummaryPage : Page
{
}
//具體產(chǎn)品類(lèi) -- 文獻(xiàn)頁(yè)
class BibliographyPage : Page
{
}
//具體工廠類(lèi) -- 個(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());
}
}
//具體工廠類(lèi) -- 報(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());
}
}
//客戶(hù)應(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) 編輯 收藏 引用