三分钟理解“建造者模式”——设计模式轻松掌握

“建造者模式”生活中的例子:

肯德基做汉堡的过程都是有严格的规范的,不管是麦香鸡腿堡还是新奥尔良烤鸡腿堡,他们的制作步骤都是有严格规定,做汉堡的人既不能多做一步,也不能少做一步。对于不同的汉堡来说,虽然每一步加的料所有不同,但做汉堡的步骤都是一样的。因为有了对做汉堡过程的严格控制,因而全国所有的肯德基店做出来的汉堡味道都是一样的。

这些汉堡就是一个个对象,刚被创建出来的时候它就是两片面包片,没有任何内容;然后我们把它扔到一个流水线上,这个流水线会按照指定的步骤往汉堡对象中逐步添加材料;当汉堡走完一遍流程后,一个汉堡就做好了。

在这个过程中,汉堡就是一个需要被构造的对象,做汉堡的所有步骤就是一个个函数,他们被封装在一个建造者类中,流水线就是一个控制类,确保每一个步骤依次执行。

建造者模式的类图:

1.把做一件事情所有的步骤作为抽象函数写到接口Builder中;

2.在实现类中重写所有抽象函数;

3.将建造者对象传递给指挥者,让指挥者依次执行所有的步骤;

4.通过Product的getProduct(),获取最后生成的对象。

建造者模式的好处:

初始化一个对象时,原本对象的参数需要客户程序自己设置;若设置对象参数的过程非常复杂,那么客户程序就会变的复杂;此时使用建造者模式,将一个对象复杂的构造过程封装在一个个建造者类中,不同的建造者类对应着不同的对象构建的方法;也就是该模式在客户端隐藏了该产品是如何组装的,若需要改变一个产品的内部表示,是需要换一个具体的建造者就可以了。避免了客户程序在构建复杂对象时候的大量代码,使得客户程序变的简洁。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-07 10:38:01

三分钟理解“建造者模式”——设计模式轻松掌握的相关文章

三分钟理解“外观模式”——设计模式轻松掌握

实际生活中的例子: 现在流行炒股,股民一般都手持好多个股票,而股民每天需要关注手中N个股票的动向,随时针对不同的股票作出不同的决策,这样感觉心好累:于是有的人选择买基金.基金本质上还是炒股票,只不过基金机构拿了投资人的钱买了N个股票,而我们只要购买一个基金就够了,对N个股票的管理就交给基金机构去折腾了,我们瞬间感觉好轻松. 代码世界也是一样,每个股票都是一个类,每个基金都是一个类,股民就是这些类的使用者.如果股民直接操作多个股票类,那会导致股民类中的操作非常复杂,那么股民类和整个系统的藕合度也就

三分钟理解“原型模式”——设计模式轻松掌握

原型模式的官方定义: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 大白话: 现在有一个类,它要产生大量的对象,而且这些对象中的属性值大部分都相同:如果我们要获取这样一个对象的时候每次都通过new,然后再set每一个属性值,那么这样就太麻烦了.这种情况下使用原型模式非常便捷: 我们让这个类去实现ICloneable接口,并且实现该接口的clone()函数,在clone函数中让当前对象进行一次浅拷贝/深拷贝,总之就是克隆一个当前对象来,这样我们就无需new完了对象后再逐个set

三分钟理解“模板方法模式”——设计模式轻松掌握

模板方法模式的官方定义: 在模板方法模式中,只定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤. 大白话讲: 当一个函数的流程都能够确定,但某些具体的步骤会根据情况的不同而不同.此时可以使用模板方法模式,将函数中能确定的部分都写出来,不确定的部分用本类中的抽象函数代替:当需要使用该函数时,需要创建一个实现该类中所有抽象函数的子类,当通过子类调用该算法时,当执行到算法中的抽象函数时,由于多态的特性,系统会自动调用子类中已经重写好

三分钟理解“工厂模式”——设计模式轻松掌握

举个例子 假设需要我们写一个简单的计算器,能实现加减乘除运算,仅要求输入两个数,选择运算符,计算出结果就行了. 使用简单工厂模式的设计如下: 工厂类提供了一个getBean函数,该函数会根据客户端输入的key来判断究竟new运算类的哪一个子类对象. 简单工厂模式的弊端: 当需要增加计算器的功能时,比如要增加一个开根号的功能,那么首先需要创建一个开根号子类,继承运算类,并实现operation函数: 除此之外,还需要修改工厂类,在getBean函数中增加对开根号的判断. 也就是说,简单工厂模式在增

三分钟理解“策略模式”——设计模式轻松掌握

实际问题: 由于超市隔三差五就要办促销活动,但每次促销活动的方式不一样,所以需要开发一个软件,营业员只要输入原价再选择活动类型后,就能计算出折扣以后的价钱. 普通人的做法: mian(){ String input = readLine(); double price = readLine(); switch (input) case "九五折": price = price * 0.95; break; case "满100返50": if(price>=1

用三分钟理解c语言sizeof

一.概念 sizeof是单目操作符,同++等操作符一样.作用是以字节形式输出操作对象所在储存大小. 二.用法 a.操作数据类型 如sizeof(int),输出int类型在内存中所占的字节长度,具体取决于具体环境,本机输出为4. b.操作变量 如 char a[6]; printf("%d\n" ,sizeof(a)),因为已经定义了char数组长度,所以输出值为6. 三.常见问题 有以下几个例子,需要引起注意: 例子1: int testSizeOf(char x[]) { retur

三分钟理解“享元模式”——设计模式轻松掌握

享原模式的官方定义: 运用共享技术有效地支持大量细粒度的对象. 大白话讲: 一个类它可能生成好多对象,但这些对象根据属性值的不同一共分成N类,每种类型中属性值都是一样的.在这种情况下,如果创建好多对象,那么这些对象中很多属性值都是重复的,从而造成了大量的内存浪费. 而享元模式能够解决重复对象的内存浪费的问题. 享元模式使用一个工厂类,在工厂类中为每种类型创建一个对象,而且每种类型的对象只有一个. 当客户端需要某种类型的对象的时候,工厂将已创建好的对象给客户端.由于不创建新的对象了,所以节省了内存

三分钟掌握“迭代器模式”——轻松搞定设计模式

迭代器模式的官方定义: 迭代器模式提供了一种方法,它能够顺序访问一个集合对象中的各个元素,并且又不暴露该对象的内部结构. 不使用迭代器模式实现容器的迭代: 当我们拿到一个含有集合的对象时,如果我们想要遍历对象中的集合,就必须要知道对象的内部结构,然后使用for循环遍历对象中的集合.而且当我们需要换一种遍历方式的时候(如:顺序遍历换成逆序遍历),需要修改客户端的代码,这就违背了"封闭-开放原则".但如果使用了迭代器模式之后,需要换迭代方式时,只需要增加一个迭代器类,然后稍微修改一下集合对

漫谈设计模式--3分钟理解桥接模式:笔和画的关系

其实不需要3分钟,3秒钟就够了,记住桥接模式就是如此简单:一句话,笔有千般形,画有万变化. 下面的仅仅助于理解. 1. 定义 The bridge pattern is a design pattern used in software engineering which is meant to "decouple an abstraction from its implementation so that the two can vary independently" From Wi