大话设计模式——建造者模式

  

  我们在建造的过程是基本稳定的,不需要大变动,只要是人这个类不管是胖瘦,都得有头身手脚。但是具体的一些细节是不同的,有高矮胖瘦、长腿长胳膊,对于用户来说他最终要的是结果,你只管建就可以了,在这样的需求下我们要将这个复杂对象的构建和其表示分离开来,使得同样的构建过程能创造更多的表示方法,满足不同用户的需求。

  1、定义

      建造者模式(Builder)将复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

  2、使用频率

       中低

  3、原型模式应用

       在软件系统中,有时候面临一个复杂对象的创建工作,该对象通常由各个部分子对象用一定的算法构成,或者按一定的步骤组合而成;这些算法和步骤是稳定的,而构成这个对象的子对象却经常由于需求的变化而不断变化。

    生活中的例子,要组装一台电脑,它的组装过程基本是不变的,都可以由主板、CPU、内存等按照某个稳定方式组合而成。然而主板、CPU、内存等零件本身都是可能多变的。将内存等这种易变的零件与电脑的其他部件分离,实现解耦合,则可以轻松实现电脑不断升级。


  4建造者模式结构

             

  5建造者模式参与者:

    1.Builder:为创建一个Product对象的各个部件指定抽象接口;

    2.ConcreteBuilder 具体实现如何画出小人的头身手脚个部分。具体建造者;实现Builder接口;构建和装配各个配件。

    3.Director:指挥者,根据用户的需求构建小人对象。构造一个使用Builder接口的对象;

    4.Product 具体的产品角色;包含定义组成部件的类,包括将这些部件装配成最终产品的接口

  在建造者模式中,Director规定了创建一个对象所需要的步骤和次序,Builder则提供了一些列完成这些步骤的方法ConcreteBuilder给出了这些方法的具体实现,是对象的直接创建者。

      建造者模式基本代码:

   Product类-产品类-多部件组成

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DesignPatterns.BuilderPattern.Structural
{
    public class Product
    {
        private List<string> _parts = new List<string>();

        public void Add(string part)
        {
            _parts.Add(part);
        }

        public void Show()
        {
            Console.WriteLine("Product Parts");
            foreach (string part in _parts)
            {
                Console.WriteLine(part);
            }
        }
    }
}

    Builder类-抽象的建造者类,产品有PartA和PartB组成,并且生命一个得到产品建造结果的GetResult.

Builder.cs  //
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DesignPatterns.BuilderPattern.Structural
{
    public abstract class Builder
    {
        public abstract void BuildPartA();
        public abstract void BuildPartB();
        public abstract Product GetResult();
    }
}



    ConcreteBuilder1-具体建造者类

ConcreteBuilder1.cs
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DesignPatterns.BuilderPattern.Structural
{
    public class ConcreteBuilder1 : Builder
    {
        private Product _product = new Product();

        public override void BuildPartA()
        {
            _product.Add("PartA");
        }

        public override void BuildPartB()
        {
            _product.Add("PartB");
        }

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


            ConcreteBuilder2-具体建造者类

ConcreteBuilder2.cs
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DesignPatterns.BuilderPattern.Structural
{
    public class ConcreteBuilder2 : Builder
    {
        private Product _product = new Product();

        public override void BuildPartA()
        {
            _product.Add("PartX");
        }

        public override void BuildPartB()
        {
            _product.Add("PartY");
        }

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


      Director-指挥类

Director.cs
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DesignPatterns.BuilderPattern.Structural
{
    public class Director
    {
        /// <summary>
        /// Builder uses a complex series of steps
        /// </summary>
        public void Construct(Builder builder)
        {
            builder.BuildPartA();
            builder.BuildPartB();
        }
    }
}


    客户端代码 ,客户完全不知建造的过程

static void Main(string[] args)
        {
            // Create director and builders
            Director director = new Director();

            Builder b1 = new ConcreteBuilder1();
            Builder b2 = new ConcreteBuilder2();
            
            // Construct two products
            director.Construct(b1);
            Product p1 = b1.GetResult();
            p1.Show();

            director.Construct(b2);
            Product p2 = b2.GetResult();
            p2.Show();
        }
    }
}


总结:

   建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示。实现最快捷的组装,提出需求能很快的做出对应产品。建造者模式的本质是使组装过程在黑箱中操作,我们不用去关心每个组件是如何组装的,只需要做好各部分的工作就能收获产品。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 31
    评论
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值