抽象工厂方法模式(创建型)

来源:互联网 发布:如何代理淘宝店 编辑:程序博客网 时间:2024/05/17 23:31

意图:

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 
适用性:

一个系统要独立于它的产品的创建、组合和表示时。

一个系统要由多个产品系列中的一个来配置时。

当你要强调一系列相关的产品对象的设计以便进行联合使用时。

当你提供一个产品类库,而只想显示它们的接口而不是实现时。


#region 抽象工厂模式
 
    #region 产品
    #region 产品A
    /// <summary>
    /// 抽象产品A
    /// </summary>
    public abstract class ProductA
    {
 
    }
 
    public class ConcreteProductA1 : ProductA
    {
        public ConcreteProductA1()
        {
            Console.WriteLine("ProductA的ConcreteProductA1...A1");
        }
    }
    public class ConcreteProductA2 : ProductA
    {
        public ConcreteProductA2()
        {
            Console.WriteLine("ProductA的ConcreteProductA2...A2");
        }
    }
    #endregion
 
    #region 产品B
    /// <summary>
    /// 抽象产品B
    /// </summary>
    public abstract class ProductB
    {
 
    }
 
    public class ConcreteProductB1 : ProductB
    {
        public ConcreteProductB1()
        {
            Console.WriteLine("ProductB的ConcreteProductB1类...B1");
        }
    }
    public class ConcreteProductB2 : ProductB
    {
        public ConcreteProductB2()
        {
            Console.WriteLine("ProductB的ConcreteProductB2类...B2");
        }
    }
 
    #endregion
 
    #endregion
 
 
    #region 工厂类
    public abstract class Creator
    {
        public abstract ProductA CreateProductA();
        public abstract ProductB CreateProductB();
    }
 
    public class ConcreteCreatorA : Creator
    {
        public override ProductA CreateProductA()
        {
            return new ConcreteProductA1();
        }
 
        public override ProductB CreateProductB()
        {
            return new ConcreteProductB1();
        }
    }
 
    public class ConcreteCreatorB : Creator
    {
        public override ProductA CreateProductA()
        {
            return new ConcreteProductA2();
        }
 
        public override ProductB CreateProductB()
        {
            return new ConcreteProductB2();
        }
    }
 
    #endregion
    #endregion  
//Client
        static void Main(string[] args)
        {           
 
            #region 抽象工厂模式
            Creator _creatorA = new ConcreteCreatorA();
            _creatorA.CreateProductA();
            _creatorA.CreateProductB();
 
            Creator _creatorB = new ConcreteCreatorB();
            _creatorB.CreateProductA();
            _creatorB.CreateProductB();
            #endregion
 
            Console.ReadLine();
        }  

0 0
原创粉丝点击