X1-4-建造者模式

总目录:地址如下看总纲

//www.greatytc.com/p/63df8cd03619

1、案例需求:盖房子的项目

  1. 需要建房子:这一过程为打桩、砌墙、封顶
  2. 房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是
    要求不要相同的

2、基础版实现(非建造者模式):

image.png

image.png

image.png

image.png

3、传统非建造者模式方式的优缺点:

  1. 优点是比较好理解,简单易操作。
  2. 设计的程序结构,过于简单,没有设计缓存层对象,程序的扩展和维护不好. 也就
    是说,这种设计方案,把产品(即:房子) 和 创建产品的过程(即:建房子流程) 封
    装在一起,耦合性增强了。
  3. 解决方案:将产品和产品建造过程解耦 => 建造者模式。

4、基本介绍建造者模式:

  1. 建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式。它可以
    将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方
    法可以构造出不同表现(属性)的对象。
  2. 建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象
    的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

5、建造者模式的四个核心角色:

  1. Product(产品角色): 一个具体的产品对象。【就是建造出来的房子】
  2. Builder(抽象建造者): 创建一个Product对象的各个部件指定的 接口/抽象类。【关注的是建造流程
    ,具体细节由子类实现,就是上面的建房基类】
  3. ConcreteBuilder(具体建造者): 实现接口,构建和装配各个部件。
  4. Director(指挥者): 构建一个使用Builder接口的对象。它主要是用于创建一个
    复杂的对象。它主要有两个作用

6、建造者模式UML类图:

image.png

7、具体代码实现:

image.png

image.png

image.png

image.png

image.png

image.png

8、JDK源码中的应用,StringBuilder类

须知:

建造者模式,并非只有上面UML图的一种体现方式,实际上没有确切固定的标准,
因为涉及模式本身是千变万化

分析:

1、Appendable 接口定义了多个append方法(抽象方法), 即Appendable 为抽象建
造者, 定义了抽象方法
2、AbstractStringBuilder 实现了 Appendable 接口方法,这里的AbstractStringBuilder 已经是建造者,
只是不能实例化
3、StringBuilder 即充当了指挥者角色,同时充当了具体的建造者,建造方法的
实现是由 AbstractStringBuilder 完成, 而StringBuilder 继承了AbstractStringBuilder


image.png

image.png

image.png

9、注意事项和细节(看看就好)

  1. 客户端(使用程序)不必知道产品内部组成的细节,将产品本身与产品的创建过程解
    耦,使得相同的创建过程可以创建不同的产品对象
  2. 每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替
    换具体建造者或增加新的具体建造者, 用户使用不同的具体建造者即可得到不同
    的产品对象
  3. 可以更加精细地控制产品的创建过程 。将复杂产品的创建步骤分解在不同的方法
    中,使得创建过程更加清晰,也更方便使用程序来控制创建过程
  4. 增加新的具体建造者无须修改原有类库的代码,指挥者类针对抽象建造者类编程,
    系统扩展方便,符合 “开闭原则”
  5. 建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间
    的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。
  6. 如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,
    导致系统变得很庞大,因此在这种情况下,要考虑是否选择建造者模式.
  7. 抽象工厂模式VS建造者模式
    抽象工厂模式实现对产品家族的创建,一个产品家族是这样的一系列产品:具有不
    同分类维度的产品组合,采用抽象工厂模式不需要关心构建过程,只关心什么产品
    由什么工厂生产即可。而建造者模式则是要求按照指定的蓝图建造产品,它的主要
    目的是通过组装零配件而产生一个新产品
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352