抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式。

模式角色和结构图:

抽象工厂是指一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象。

示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CSharp.DesignPattern.AbstractFactoryPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            IAbstractFactory factory1 = new ConcreteFactory1();
            IAbstractFactory factory2 = new ConcreteFactory2();

            IProductA a1 = factory1.CreateProductA();
            IProductA a2 = factory2.CreateProductA();

            IProductB b1 = factory1.CreateProductB();
            IProductB b2 = factory2.CreateProductB();

            a1.Display();
            a2.Display();

            b1.Display();
            b2.Display();

            Console.ReadLine();
        }
    }

    interface IAbstractFactory
    {
        IProductA CreateProductA();
        IProductB CreateProductB();
    }

    class ConcreteFactory1 : IAbstractFactory
    {
        public IProductA CreateProductA()
        {
            return new ProductA1();
        }

        public IProductB CreateProductB()
        {
            return new ProductB1();
        }
    }

    class ConcreteFactory2 : IAbstractFactory
    {
        public IProductA CreateProductA()
        {
            return new ProductA2();
        }

        public IProductB CreateProductB()
        {
            return new ProductB2();
        }
    }


    interface IProductA
    {
        void Display();
    }

    class ProductA1 : IProductA
    {
        public void Display()
        {
            Console.WriteLine("显示浅绿色按钮...");
        }
    }

    class ProductA2 : IProductA
    {
        public void Display()
        {
            Console.WriteLine("显示蓝色按钮...");
        }
    }

    interface IProductB
    {
        void Display();
    }

    class ProductB1 : IProductB
    {
        public void Display()
        {
            Console.WriteLine("显示浅绿色文本框...");
        }
    }

    class ProductB2 : IProductB
    {
        public void Display()
        {
            Console.WriteLine("显示蓝色文本框...");
        }
    }
}

 

posted on 2012-11-27 22:25  逝者如斯(乎)  阅读(1330)  评论(0编辑  收藏  举报