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

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

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

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

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

 

针对上图用代码表示:

    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();

        }

    }

 

 

 

 

 

你可能感兴趣的:(abstract)