创建型模式(六)建造者模式

介绍这个设计模式之前,我先说两个知识点。Is-a、Has-a。

Is-a 指一个类是另一个类的一种,是属于关系。

Has-a 指表示一个角色的一项责任。

一句话的概要

创建一个复杂的对象,让其由各部分子对象通过一定的步骤而组合而成。这就是建造者模式。

剧情

小明跟女神交往过程中,总是感觉进展缓慢。于是小明就决定用一个烛光晚餐的惊喜,来打动女神。

但是,小明就一个人,他白天要约女神出来。所以他准备雇佣一个人来进行烛光晚餐的准备。

剧情看着很简单,但是我们来分析一下,怎么构造这种场景。

首先,必要的人物就是小明和雇佣的人。如果使用建造者模式的话。可以把小明看作指挥者,然后雇佣的小A(起个名字,方便些)是建造者。

然后,我们要定义具体有什么工作。和烛光晚餐的具备的东西。

最后,我们由小明来指挥,雇佣的人进行干活。

那么我们接下来用建造者模式,来构造此剧情。

任务一:创建烛光晚餐

首先创建烛光晚餐这个类,一共两个方法,准备和开始吃。

public class Supper
    {
        IList<string> list = new List<string>();
        public void Add(string name)
        {
            list.Add(name);
        }
        public void GetSupper() {
            foreach (string name in list)
            {
                Console.WriteLine(name+"。完毕");
            }
            Console.WriteLine("可以享用晚餐了");
        }
    }

准备步骤用一个List来存放,开始吃会先循环这个List,然后进行享用。

任务二:创建建造者小A

首先把建造者的任务,抽象为类。然后把小A继承这个抽象类,来实现具体的操作。

public abstract class Hire
    {
        //蜡烛
        public abstract void Candle();
        //牛排
        public abstract void Steak();
        //香槟
        public abstract void Champagne();
        //烛光晚餐
        public abstract Supper GetSupper();
    }
    public class SomeA : Hire
    {
        Supper Su = new Supper();
        public override void Candle()
        {
            Su.Add("购买蜡烛");
        }
        public override void Champagne()
        {
            Su.Add("制作牛排");
        }
        public override void Steak()
        {
            Su.Add("拿出香槟");
        }
        public override Supper GetSupper()
        {
            return Su;
        }
    }

每执行一个步骤,都会向烛光晚餐添加一条信息。代码很简单,没啥说的。

任务三:创建小明同学

小明同学有两个方法,第一指挥小A准备晚餐。第二跟女神吃完饭。

public class SomeMing
    {
        public void Read(Hire hi)
        {
            hi.Candle();
            hi.Champagne();
            hi.Steak();
        }
        public void Go(Hire hi)
        {
            Supper sup = hi.GetSupper();
            sup.GetSupper();
        }
    }

很简单,没啥说的。

任务四:小明约女神吃饭

小明同学约女神,然后打电话给小A让他准备晚餐。然后去吃烛光晚餐。

static void Main(string[] args)
        {
            Console.WriteLine("小明约出女神");
            Console.WriteLine("小明开始让小A准备晚餐");
            SomeMing m = new SomeMing();
            Hire hi = new SomeA();
            m.Read(hi);
            Console.WriteLine("晚餐准备完毕");
            m.Go(hi);
            Console.ReadLine();

        }

执行结果

总结

建造者模式,创建烛光晚餐这种复杂对象,会分为几个小责任,这样会拼接成一个复杂的对象。而且指挥者和建造者也进行了解耦。

我如果添加建造者,只要实现抽象类。则指挥者和现有建造者不用进行任何改动。

常用场景:需要构建一批过程相同但构造过程非常复杂的产品。

选择关键点:产品的构造过程是否相同。

最后说几句

至此,创建型模式的6个设计模式,介绍完毕。不管你们懂不懂,反正我懂了。

创建型设计模式,就是用来创建对象的模式。并且抽象了实例化的过程。

所有的创建型设计模式都有两个共同点:

一、它们都将系统使用那些具体类封装起来。

二、它们隐藏了这些类的实例是如何被创建和组成。

设计模式是可以组合使用的,比如说抽象工厂中,带着单例模式。都是可以的。

接下来,我们介绍结构型的7种设计模式。我们的主人公小明同学,到底跟女神还会发生什么事情呢?我们接着往下看~

By~

时间: 2024-08-08 05:57:57

创建型模式(六)建造者模式的相关文章

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建造者模式