建造者

Java设计模式-建造者模式

本秂侑毒 提交于 2019-12-25 22:30:57
建造者模式概述 建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。它关注如何一步一步创建一个的复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的建造者非常方便,无须修改已有代码,系统具有较好的扩展性。 建造者模式结构 ● Builder(抽象建造者):它为创建一个产品 Product 对象的各个部件指定抽象接口,在该接口中一般声明两类方法,一类方法是 buildPartX(),它们用于创建复杂对象的各个部件;另一类方法是 getResult(),它们用于返回复杂对象。Builder既可以是抽象类,也可以是接口。 ● ConcreteBuilder(具体建造者):它实现了 Builder 接口,实现各个部件的具体构造和装配方法,定义并明确它所创建的复杂对象,也可以提供一个方法返回创建好的复杂产品对象。 ● Product(产品角色):它是被构建的复杂对象,包含多个组成部件,具体建造者创建该产品的内部表示并定义它的装配过程。 ● Director(指挥者):指挥者又称为导演类,它负责安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系,可以在其 construct() 建造方法中调用建造者对象的部件构造与装配方法

设计模式-建造者模式

时光总嘲笑我的痴心妄想 提交于 2019-12-24 05:26:38
建造者模式(创建型模式) 定义 建造者模式(Builder) ,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。[DP] 自己的理解: 建造者模式是把复杂得对象的构建分离出来,然后调用者不用知道对象的构建细节,只需要指定类型,就可以得到构建好的对象,且对象完整。 特点 具体产品构建出来的顺序不变 指挥者按顺序调用建造者的各个方法 产品的构建步骤被拆分成每一个方法 结构 Builder:建造者父接口 ConcreteBuilder1:具体建造者 ConcreteBuilder2:具体建造者 Director:指挥者,构建一个产品时,调用建造者的各个方法 Product:具体产品 代码 例子:一个完整的小人作为具体产品,完整的产品必须有头、身体、手、腿,构建两个不同的小人作为两个具体的建造者,创建小人的所有步骤由指挥者调用,客户端调用只需指定需要哪种小人,就可以得到完整的小人(不会缺手缺脚)。 建造者父接口 /** * @ Author :fonxi * @ Date :2019/5/24 15:59 * @ Description:创建一个Product对象的各个不见置顶的抽象接口 */ public abstract class Builder { public abstract void buildHead(); public abstract void

大话设计模式--建造者模式 Builder -- C++实现实例

点点圈 提交于 2019-12-23 21:33:37
1. 建造者模式,将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示。 用户只需要指定需要建造的类型就可以得到他们,而具体建造的过程和细节就不需要知道了。 关键类Director,用它来控制建造过程,用它来隔离用户与建造过程的关联。 适用场合主要是用于创建一些复杂的对象, 这些对象内部的构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。 在创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式适用的模式。 建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。 实例骨架: product.h product.cpp #ifndef PRODUCT_H #define PRODUCT_H #include <iostream> #include <list> #include <string> using namespace std; class Product { public: Product(); void addPart(string part); void show(); private: list<string> *parts; }; #endif // PRODUCT_H #include "product.h"

python建造者模式_1

 ̄綄美尐妖づ 提交于 2019-12-23 01:02:38
建造者模式 与工厂模式的区别: 工厂模式/抽象工厂模式与建造者模式最大的区别在于,工厂模式直接返回一个实例,使用实例的内在方法(各实例间使用同名方法) 工厂模式:调用工厂类直接返回一个可操作性实例 建造者模式:一个和多个对象类(内在方法),由指挥类去组装 来源: https://www.cnblogs.com/kaiseryin/p/11967656.html

设计模式之建造者模式

岁酱吖の 提交于 2019-12-23 00:40:40
从800万年前东非大裂谷出现造就非洲猿開始随环境不断进化到类人猿、猿人,最后随着历史的脚步进化到现代智人。 人类的脚步,从来就不曾停止;人类文明的进步不断加快。这当中最重要的就是人类把已有的经验总结成一个个做事流程保留传承下来。流程不变。但每一个流程实现的详细细节则是常常变化的。 这就是要说的建造者模式。 建造者模式的优点就是保证了流程不会变化,流程即不会添加、也不会遗漏或者产生流程次序错误。 建造者模式中的角色: 1. builder :是为创建一个Product对象的各个部件指定的抽象接口。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及详细的对象部件的创建。 2. ConcreteBuilder:详细建造者。实现Builder接口,构造和装配各个部件。针对不同的商业逻辑,详细化复杂对象的各部分的创建。 在建造过程完毕后,提供产品的实例。 3. Director:指挥者。构建一个使用Builder接口的对象,调用详细建造者来创建复杂对象的各个部分,在指挥者中不涉及详细产品的信息。仅仅负责保证对象各部分完整创建或按某种顺序创建。 4. Product:详细产品要创建的复杂对象。 建造者模式结构图: 什么时候用这个模式呢? a.创建一些复杂的对象时。这些对象的内部组成构件间的建造顺序是稳定的,可是对象的内部组成构件面临着复杂的变化。 b.要创建的复杂对象的算法

设计模式(11)---->建造者模式

主宰稳场 提交于 2019-12-21 17:13:52
建造者模式 一、定义 建造者模式 (Builder) :将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 二、模式解读: 类图 2.2.模式中的角色 产品( Product ):表示被构造的复杂对象。 ConcreteBuilder 创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。 建造者( Builder ):为创建一个产品对象的各个部件指定抽象接口。 具体建造者( ConcreteBuilder ):实现 Builder 的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。 指挥者( Director ):指挥并构造一个使用 Builder 接口的对象。 三、实例: 创建两种车:普通车和赛车,他们都是装配车轮、发动机、车身,只不过选用的部件不同。 1. 具体的产品类,即我们要制造的产品汽车 import java.util.ArrayList; class Car { private ArrayList<String> parts = new ArrayList<String>(); public void add(String part) { parts.add(part); } public void show() { System.out.println(

一文带你了解建造者模式及相关实例解析

你。 提交于 2019-12-21 13:27:51
1.简介 The builder pattern is a design pattern designed to provide a flexible solution to various object creation problems in object-oriented programming. The intent of the Builder design pattern is to separate the construction of a complex object from its representation. (builder模式是一种设计模式,旨在为面向对象编程中的各种对象创建问题提供灵活的解决方案。Builder设计模式的目的是将复杂对象的构造与其表示分离开来。) – 引用自维基百科 ​ Builder设计模式的目的是将复杂对象的构造与其表示分离开来。通过这样做,相同的构造过程可以创建不同的表示 2.建造模式利弊 优点: 允许您更改产品的内部表示。 封装用于构造和表示的代码。 控制施工过程的各个步骤。 缺点: 需要为每个不同类型的产品创建一个单独的ConcreteBuilder。 要求构造器类是可变的。 不能保证类的数据成员被初始化。 依赖性注入可能不太受支持。 3.相关实例 ​ 这里我们举个造房子的例子,构建一个房子需要相应的建造团队和总指挥

java23种设计模式(二)-- 建造者模式和原型模式

假装没事ソ 提交于 2019-12-20 10:04:47
一、建造者模式 将一个复杂对象的构建与它的表示分离,使得 同样的构建过程可以创造不同的表示 。 特点:   (1)、在某些属性没有赋值之前,复杂对象不能作为一个完整的产品使用。比如汽车包括方向盘、车门、发动机等各部件,缺少了这些部件就不能生产使用。   (2)、对象的一些属性必须按照 顺序 赋值,比如汽车应有车架才能装车轮和其他部件。 建造者模式涉及到以下四个角色的概念:    - 抽象建造者角色: 提供一个接口,规范产品对象的建造,一般由子类实现。一般来说,产品的组成部分数与建造方法数相同,即有多少组成部分,就有多少个建造方法。    - 具体建造者角色: 该角色实现了抽象建造者抽象建造者接口,主要是实现所有声明的方法以及返回建造好的产品实例。    - 导演者角色: 负责调用具体建造者按照顺序建造产品。导演者只负责调度,真正执行的是具体建造者角色。    - 产品角色: 该角色是建造的复杂对象,提供基本方法。 具体实现 1、创建产品角色 1 public class Production { 2 3 private String part1; 4 5 private String part2; 6 7 public String getPart1() { 8 return part1; 9 } 10 11 public void setPart1(String part1) {

设计模式-生成器模式

时光怂恿深爱的人放手 提交于 2019-12-18 18:52:50
前言 点击查看: 设计模式系列 生成器模式(建造者模式/builder) 定义:将一个复杂的对象,分成多分,使同样的构建过程,能有不同的表示,这样的设计模式被称为建造者模式。 举例说明: 李嘉诚的遗嘱执行: 财产(产品角色):李嘉诚拥有众多复杂的财产框架,这里以现金与物品入例。 遗嘱(建造者):相当于建造者,分配现金与物品。 具体遗嘱(具体建造者):1.给大儿子的财产分配,2,给小儿子的财产分配。 律师(指导者角色):按照具体的遗嘱指令分配财产。 例子类图: 庞大的财产结构代码: // 财产(复杂的财产) class CaiChan { //现金 public float money { get; set; } // 物品 public string product { get; set; } //展示老爸留给他的遗产 public void Show() { Console.WriteLine(" 我升仙以后,给你现金:"+money+"元,给你的物品是:"+product); } } 遗嘱关于遗产的分配,建造者,具体建造者 // 爸爸分配财产(建造者) abstract class DidCaiChan { //分钱 abstract public void giveMoney(); //分传家宝 abstract public void giveProduct();

设计模式之建造者模式(Builder)

孤街醉人 提交于 2019-12-17 06:55:57
一个人活到70岁以上,都会经历这样的几个阶段:婴儿,少年,青年,中年,老年。并且每个人在各个阶段肯定是不一样的呀,我觉得可以说世界上不存在两个人在人生的这5个阶段的生活完全一样,但是活到70岁以上的人,都经历了这几个阶段是肯定的。实际上这是一个比较经典的建造者模式的例子了。 1.初识建造者模式 建造者模式实际上是常用的设计模式。顾名思义,builder的意思是建造者或者建筑工人,谈到建造自然会想到楼房。楼房是千差万别的,楼房的外形、层数、内部房间的数量、房间的装饰等等都不一样,但是对于建造者来说,抽象出来的建筑流程是确定的,往往建筑一座楼房包括下面的步骤:(1)打桩,建立基础(2)建立框架等。建造者模式的本质和建造楼房是一致的:即流程不变,但每个流程实现的具体细节则是经常变化的。建造者模式的好处就是保证了流程不会变化,流程即不会增加、也不会遗漏或者产生流程次序错误,这是非常重要的。我们熟知的楼歪歪事件,官方的解释就是由于先建立楼房后,再建设停车场造成的,这是典型的建造次序错乱。(看来这些人儿不知道建造者模式啊!!!) 我生活的地方有一个菜叫“锅包肉”。基本每个餐馆都有,但是每个餐馆的味道都不一样,原因是什么呢?因为这道菜的作法没有形成标准呗!每个人的作法都不一样,所以味道就不一样了。这实际上通过“建造者模式”让每个馆子的“锅包肉”都一样。同样的KFC做出来的东西