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

摘要: 查看本人文章索引请通过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 @   赵学智  阅读(898)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示