C#设计模式之Abstract Factory

添加人:iyond六级(3293分)   添加时间:2007-05-18    阅读次数:1498  收藏此教程
名称:Abstract Factory
结构:
 
意图:
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
 
适用性 :
  1. 一个系统要独立于它的产品的创建、组合和表示时。
  2. 一个系统要由多个产品系列中的一个来配置时。
  3. 当你要强调一系列相关的产品对象的设计以便进行联合使用时。
  4. 当你提供一个产品类库,而只想显示它们的接口而不是实现时。 
示例代码
// Abstract Factory
namespace AbstractFactory_DesignPattern
{
    using System;

    // These classes could be part of a framework,
    // which we will call DP
    // ===========================================
    
    abstract class DPDocument
    {
        abstract public void Dump();
    }

    abstract class DPWorkspace
    {
        abstract public void Dump();
    }
    
    abstract class DPView
    {
        abstract public void Dump();
    }
    
    abstract class DPFactory
    {
        abstract public DPDocument CreateDocument();
        abstract public DPView CreateView();
        abstract public DPWorkspace CreateWorkspace();
    }

    abstract class DPApplication
    {
        protected DPDocument doc;
        protected DPWorkspace workspace;
        protected DPView view;
        
        public void ConstructObjects(DPFactory factory)
        {
            // Create objects as needed
            doc = factory.CreateDocument();
            workspace = factory.CreateWorkspace();
            view = factory.CreateView();
        }
        
        abstract public void Dump();

        public void DumpState()
        {
            if (doc != null) doc.Dump();
            if (workspace != null) workspace.Dump();
            if (view != null) view.Dump();
        }
    }

    // These classes could be part of an application
    class MyApplication : DPApplication
    {
        MyFactory myFactory = new MyFactory();

        override public void Dump()
        {
            Console.WriteLine("MyApplication exists");
        }

        public void CreateFamily()
        {
            MyFactory myFactory = new MyFactory();
            ConstructObjects(myFactory);
        }
    }

    class MyDocument : DPDocument
    {
        public MyDocument()
        {
                Console.WriteLine("in MyDocument constructor");
        }
        
        override public void Dump()
        {
            Console.WriteLine("MyDocument exists");
        }
    }

    class MyWorkspace : DPWorkspace
    {
        override public void Dump()
        {
            Console.WriteLine("MyWorkspace exists");
        }
    }

    class MyView : DPView
    {
        override public void Dump()
        {
            Console.WriteLine("MyView exists");
        }
    }

    class MyFactory : DPFactory
    {
        override public DPDocument CreateDocument()
        {
            return new MyDocument();
        }
        override public DPWorkspace CreateWorkspace()
        {
            return new MyWorkspace();
        }
        override public DPView CreateView()
        {
            return new MyView();
        }
    }

    /// <summary>
    /// Summary description for Client.
    /// </summary>
    public class Client
    {
        public static int Main(string[] args)
        {
            MyApplication myApplication = new MyApplication();

            myApplication.CreateFamily();

            myApplication.DumpState();
            
            return 0;
        }
    }
}

1页 第1上一页1下一页
相关的教程: CSharp 设计模式 Abstract Factory
收藏此教程

当前平均分: -5.0(1 次打分)

-5-4-3-2-1012345
评论主题
您的大名
您的评论
验证码 点击换一个验证码
知识库搜索: