前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式- 建造者模式(Builder Pattern)

设计模式- 建造者模式(Builder Pattern)

作者头像
易兒善
发布2019-05-10 10:32:05
3150
发布2019-05-10 10:32:05
举报
文章被收录于专栏:挖坑填坑挖坑填坑

定义

建造者模式(Builder Pattern):将复杂对象的构造与其表示分离,以便相同的构造过程可以创建不同的表示

主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

想象一个角色扮演游戏的角色生成器。最简单的选择是让计算机为您创建角色。但是,如果你想选择角色的细节,比如职业、性别、头发颜色等,那么角色的生成就成了一个循序渐进的过程,当所有的选择都准备好时,这个过程就完成了。

C#例子

代码语言:javascript
复制
    public class People
    {
        private readonly string _profession;
        private readonly string _name;
        private string _hairType;
        private string _hairColor;

        public People(Builder builder)
        {
            this._profession = builder.Profession;
            this._name = builder.Name;
            this._hairColor = builder.HairColor??"黑";
            this._hairType = builder.HairType??"短发";
        }
        public string Show() {
            return string.Format("这个人的名字是{1},职业是{0},有一头{2}色的{3}",_profession,_name,_hairColor,_hairType);
        }
    }

    public sealed  class Builder
    {
        public string Profession { get; private set; }
        public string Name { get; private set; }
        public string HairType { get; private set; }
        public string HairColor { get; private set; }
        public Builder(string profession, string name)
        {
            if (profession == null || name == null)
            {
                throw new Exception("profession 和 name 不能为空");
            }
            this.Profession = profession;
            this.Name = name;
        }

        public Builder WithHairType(string hairType)
        {
            this.HairType = hairType;
            return this;
        }

        public Builder WithHairColor(string hairColor)
        {
            this.HairColor = hairColor;
            return this;
        }
        public People Build()
        {
            return new People(this);
        }
    }

        static void Main(string[] args)
        {
            People people1 = new Builder("厨师", "张三")
                .WithHairColor("黑")
                .WithHairType("波浪卷发")
                .Build();
            Console.WriteLine(people1.Show());

            People people2 = new Builder("程序员", "李四")
                .WithHairColor("白")
                .Build();
            Console.WriteLine(people2.Show());
            Console.ReadLine();
        }

建造者模式参与者:

  • People:被构建的对象,一般这样的对象构建复杂。
  • Builder:建造者对象,提供分部构建People的各种方法。

建造者模式适用情形

  • 创建复杂对象的算法应该独立于组成对象的各个部分以及它们的组装方式;
  • 构造过程必须允许对构造的对象进行不同的表示。

建造者模式特点

  • 允许您创建不同风格的对象,同时避免构造函数污染。当一个对象可能有多种风格时很有用。或者当有很多步骤涉及到对象的创建时。
  • 与工厂模式的区别是:建造者模式更加关注与零件装配的顺序

其他

实例

  • System.Text.StringBuilder
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.04.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定义
  • C#例子
  • 建造者模式参与者:
  • 建造者模式适用情形
  • 建造者模式特点
  • 其他
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档