首页 > 其他 > 详细

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

时间:2014-03-14 14:12:52      阅读:390      评论:0      收藏:0      [点我收藏+]

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

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

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

bubuko.com,布布扣 

 

针对上图用代码表示:

bubuko.com,布布扣
    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();
        }
    }
bubuko.com,布布扣

2.设计模式-Abstract Factory 抽象工厂模式,布布扣,bubuko.com

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

原文:http://www.cnblogs.com/NetBelieve/p/3599644.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!