创建型模式之建造者模式

概述

建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。它关注如何一步一步创建一个的复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的建造者非常方便,无须修改已有代码,系统具有较好的扩展性。

定义

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。

实现

游戏角色类

    /// <summary>
    /// 游戏角色
    /// </summary>
    public class Actor
    {
        /// <summary>
        /// 角色类型
        /// </summary>
        public string Type { get; set; }
        /// <summary>
        /// 性别
        /// </summary>
        public string Sex { get; set; }
        /// <summary>
        /// 脸型
        /// </summary>
        public string Face { get; set; }
        /// <summary>
        /// 服装
        /// </summary>
        public string Costume { get; set; }
        /// <summary>
        /// 发型
        /// </summary>
        public string Hairstyle { get; set; }
    }

英雄角色创建者

    public class HeroBuilder : ActorBuilder
    {
        public override void BuildCostume()
        {
            actor.Costume = "黑色披风";
        }

        public override void BuildFace()
        {
            actor.Face = "方形刚毅脸";
        }

        public override void BuildHairstyle()
        {
            actor.Hairstyle = "短发";
        }

        public override void BuildSex()
        {
            actor.Sex = "男";
        }

        public override void BuildType()
        {
            actor.Type = "英雄";
        }
    }

天使角色创建者

    public class AngelBuilder : ActorBuilder
    {
        public override void BuildCostume()
        {
            actor.Costume = "白色短裙";
        }

        public override void BuildFace()
        {
            actor.Face = "圆润脸蛋";
        }

        public override void BuildHairstyle()
        {
            actor.Hairstyle = "披肩长发";
        }

        public override void BuildSex()
        {
            actor.Sex = "女";
        }

        public override void BuildType()
        {
            actor.Type = "天使";
        }
    }

指挥者

    public class ActorController
    {
        /// <summary>
        /// 指挥者严格按照流程构造一个角色
        /// 确保新建的角色不会出现偏差
        /// </summary>
        /// <param name="ab"></param>
        /// <returns></returns>
        public Actor GetActor(ActorBuilder ab)
        {
            ab.BuildType();
            ab.BuildSex();
            ab.BuildFace();
            ab.BuildCostume();
            ab.BuildHairstyle();
            return ab.CreateActor();
        }
    }

客户端

    class Program
    {
        static void Main(string[] args)
        {
            ActorController controller = new ActorController();
            Actor hero = controller.GetActor(new HeroBuilder());
            Actor angel = controller.GetActor(new AngelBuilder());
        }
    }

总结

建造者模式的核心在于如何一步步构建一个包含多个组成部件的完整对象,使用相同的构建过程构建不同的产品,在软件开发中,如果我们需要创建复杂对象并希望系统具备很好的灵活性和可扩展性可以考虑使用建造者模式。

主要优点

1、在建造者模式中,客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。

2、 每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。由于指挥者类针对抽象建造者编程,增加新的具体建造者无须修改原有类库的代码,系统扩展方便,符合“开闭原则”

3、 可以更加精细地控制产品的创建过程。将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,也更方便使用程序来控制创建过程。

主要缺点

1、建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,例如很多组成部分都不相同,不适合使用建造者模式,因此其使用范围受到一定的限制。

2、如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大,增加系统的理解难度和运行成本。

适用场景

1、 需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员属性。

2、需要生成的产品对象的属性相互依赖,需要指定其生成顺序。

3、对象的创建过程独立于创建该对象的类。在建造者模式中通过引入了指挥者类,将创建过程封装在指挥者类中,而不在建造者类和客户类中。

4、隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。

时间: 2024-12-21 06:35:15

创建型模式之建造者模式的相关文章

java-设计模式(创建型)-【建造者模式】

1.BuilderMode 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.[构建与表示分离,同构建不同表示] 比如,一辆汽车由很多部件组成.部件有不同,组装方式也有不同. 与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的, 指导者联系建造者最后得到产品.即建造模式可以强制实行一种分步骤进行的建造过程. 使用场景: 1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. 2.当构造过程必须允许被构造的对象有

创建型设计模式 之 建造者模式

一.介绍 生成器模式是什么呢? <研磨设计模式中>给了这样的定义:将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表示. 生成器模式的本质——分离整体构建算法和部件构造. 其实,生成器模式的目的,便是为了构建复杂的产品,将构建算法和构造实现分离出来,以便系统可以更好的优化.扩展. 理解生成器模式主要是理解生成器2个部件,一个是生成器(Builder),一个是指导者(Director).生成器指的是整个复杂对象的构建过程.构建算法.而指导者指的是对生成器所生成的部件对象的构造

创建型模式:建造者模式

个人公众号原文: 创建型模式:建造者模式 五大创建型模式之四:建造者模式. 简介 姓名 :建造者模式 英文名 :Builder Pattern 价值观 :专治丢三落四 个人介绍 : Separate the construction of a complex object from its representation so that the same construction process can create different representations. 将一个复杂对象的构建与它的

7创建型模式之建造者模式

概念 Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种.Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象. 对象的创建:Builder模式是为对象的创建而设计的模式- 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象- 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法 角色和职责 1)

C#设计模式之创建类模式:建造者模式

无论在现实世界中还是软件工程中,都存在一些复杂对象,他们拥有多个组成部分,例如汽车.电脑.冰箱.洗衣机等.他们包含了大量的零部件.对于大部分用户而言,他们并不知道这些部件的装配细节,也几乎不会适用单独某部件,而是使用一辆完整的汽车,一个完整的冰箱或洗衣机.如何将这些部件组装成一个完整的产品并返回给客户,是建造者模式需要解决的问题,建造者模式可以将部件本身和他们的组装过程分开,它关注如何一步步创建一个包含多个组成部分的复杂对象,用户只需要指定复杂对象的类型即可得到该对象,而不是知道其内部的实现细节

【设计模式】 模式PK:工厂模式VS建造者模式

1.概述 工厂方法模式注重的是整体对象的创建方法,而建造者模式注重的是部件构建的过程,旨在通过一步一步地精确构造创建出一个复杂的对象.我们举个简单例子来说明两者的差异,如要制造一个超人,如果使用工厂方法模式,直接产生出来的就是一个力大无穷.能够飞翔.内裤外穿的超人:而如果使用建造者模式,则需要组装手.头.脚.躯干等部分,然后再把内裤外穿,才能创造一个超人. 2.工厂方法建造超人 2.1 类图 首先我们按照工厂方法创造超人,我们来看类图.类图中我们按照年龄段把超人分为两种类型:成年超人(如克拉克.

2015-03-12---外观模式,建造者模式(附代码),观察者模式(附代码),boost库应用

今天白天主要看了boost库的应用,主要是经常使用的一些库,array,bind,function,regex,thread,unordered,ref,smartpointers库,晚上看了看设计模式.主要就是外观模式.建造者模式和观察者模式.我们从boost简要说起. 事实上boost的库好多东西在c++11里面已经有了.比方bind,仅仅只是boost的库的bind比c++11用着感觉要方便.事实上有些东西我自己由于也没实用c++做过什么大的项目.所以不敢乱说,仅仅敢说点建议性的,关于bi

2015-03-12---外观模式,建造者模式,观察者模式,boost库应用

今天白天主要看了boost库的应用,主要是常用的一些库,array,bind,function,regex,thread,unordered,ref,smartpointers库,晚上看了看设计模式,主要就是外观模式,建造者模式和观察者模式.我们从boost简要说起. 其实boost的库好多东西在c++11里面已经有了,比如bind,只不过boost的库的bind比c++11用着感觉要方便,其实有些东西我自己因为也没有用c++做过什么大的项目,所以不敢乱说,只敢说点建议性的,关于bind就是绑定

【图解】抽象工厂模式PK建造者模式

抽象工厂模式: 如果换成建造者模式,建造者会先组装车的各个零配件,然后在生产成一部车. [图解]抽象工厂模式PK建造者模式