2.设计模式-Abstract Factory 抽象工厂模式

 大神勿喷,不对的地方请指出来,学笔记而已。

解决的问题:应对多系列对象构建的变化或多系列(例如:崎岖的山路和平坦的马路属于一个系列不断的变化的创建。

使用场景:对象不变(比如有3个对象 "路, 房子, 湖" 这些不能有增加或者减少),系列经常变,并且比较多(”路“对象 包含崎岖的山路和平坦的马路等

 

 

针对上图用代码表示:

    public abstract class AbstractProductA
    {

    }

    public abstract class AbstractProductB
    {

    }

    public abstract class AbatractFactory
    {
        public abstract AbstractProductA CreateAbstractProductA();

        public abstract AbstractProductB CreateAbstractProductB();
    }

    public class ConcreteAbstractProductA : AbstractProductA
    {

    }

    public class ConcreteAbstractProductB : AbstractProductB
    {

    }

    //实例1
    public class ConcreteFactroy1 : AbatractFactory
    {
        public override AbstractProductA CreateAbstractProductA()
        {
            return new ConcreteAbstractProductA();//ProductA1
        }

        public override AbstractProductB CreateAbstractProductB()
        {
            return new ConcreteAbstractProductB();//ProductB1
        }
    }

    //实例2
    public class ConcreteFactroy2 : AbatractFactory
    {
        public override AbstractProductA CreateAbstractProductA()
        {
            return new ConcreteAbstractProductA();//ProductA2
        }

        public override AbstractProductB CreateAbstractProductB()
        {
            return new ConcreteAbstractProductB();//ProductB2
        }
    }

    //Client
    public class ClientManager
    {
        public AbatractFactory m_abatractFactory;

        public ClientManager(AbatractFactory abatractFactory)
        {
            m_abatractFactory = abatractFactory;
        }

        public AbstractProductA abstractProductA;
        public AbstractProductB abstractProductB;

        public void BuildProduct()
        {
            abstractProductA = m_abatractFactory.CreateAbstractProductA();

            abstractProductB = m_abatractFactory.CreateAbstractProductB();
        }
    }

    public class Operator
    {
        //实例出不同的实例
        public void TestFactory()
        {
            ClientManager client1Manager = new ClientManager( new ConcreteFactroy1());
            client1Manager.BuildProduct();

            ClientManager client2Manager = new ClientManager(new ConcreteFactroy2());
            client2Manager.BuildProduct();
        }
    }

 

 

 

 

 

posted @ 2014-03-14 00:12  __DNet_Believe  阅读(140)  评论(0编辑  收藏  举报