设计模式培训之八:建造者模式

摘要: 查看本人文章索引请通过http://www.cnblogs.com/seesea125/archive/2012/04/17/2453256.html

一、定义

将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。

PIC041

二、应用场景

当一个产品需要复杂的构造,但是构造过程是稳定的,只是构造的对象有不同表示时,就可以使用建造模式。

三、代码实现

class Product
    {
        IList<string> parts=new List<string>(); 
        public void Add(string part)
        {
            parts.Add(part);
        }
        public void show()
        {
            Console.WriteLine("\n产品 创建----");
            foreach (string part in parts)
            {
                Console.WriteLine(part);
            }
        }

    }

    internal abstract class Bulider
    {
        public abstract void BulidPartA();
        public abstract void BulidPartB();
        public abstract Product GetResult();
    }

    class ConcreteBuilder1:Bulider
    {
         private Product product =new Product();

         public override void BulidPartA()
         {
             product.Add("部件A");
         }
         public override void BulidPartB()
         {
             product.Add("部件B");
         }

         public override Product GetResult()
         {
             return product;
         }
    }

    class ConcreteBuilder2 : Bulider
    {
        private Product product = new Product();

        public override void BulidPartA()
        {
            product.Add("部件X");
        }
        public override void BulidPartB()
        {
            product.Add("部件Y");
        }

        public override Product GetResult()
        {
            return product;
        }
    }

    class Director
    {
         public void Construct(Bulider bulider)
         {
             bulider.BulidPartA();
             bulider.BulidPartB();
         }
    }

客户端调用:

Director director = new Director();
            Bulider b1 = new ConcreteBuilder1();
            Bulider b2 = new ConcreteBuilder2();
            director.Construct(b1);
            Product p1 = b1.GetResult();
            p1.show();

            director.Construct(b2);
            Product p2 = b2.GetResult();
            p2.show();

            Console.Read();

 

posted @ 2012-06-01 16:17  赵学智  阅读(898)  评论(0编辑  收藏  举报