随笔-6  评论-3  文章-0  trackbacks-0

工厂方法模式又称工厂模式,也叫虚拟构造器模式或多态工厂模式,属于类的创建型模式。在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化哪一个类。


示例:多文档系统

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 阅读(406) 评论(1)  编辑 收藏 引用

评论:
# re: 设计模式学习--Factory Method Pattern(工厂方法模式) [未登录] 2010-11-28 23:16 | 代码疯子
C#滴啊……  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理