工厂方法模式又称工厂模式,也叫虚拟构造器模式或多态工厂模式,属于类的创建型模式。在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化哪一个类。
示例:多文档系统
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 阅读(416)
评论(1) 编辑 收藏 引用