建造者

建造者模式

自古美人都是妖i 提交于 2020-01-15 06:43:00
当需要将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,就可以使用建造者模式。 在建造者模式中,用户只需要指定需要建造的类型就可以得到它们,而建造的具体过程和细节是不需要知道的。 下面使用建造小人,举例说明该模式: 首先创建不同的建造者: /// <summary> /// 建造者的接口,定义了建造某个对象需要的部分 /// </summary> public interface IPersonBuilder { void BuildHead(); void BuildBody(); void BuildArm(); void BuildLeg(); } /// <summary> /// 具体的建造者,继承建造者接口,实现了每个部分的细节 /// </summary> public class TallPersonBuilder : IPersonBuilder { public void BuildHead() { Console.WriteLine("Build Tall Person Head"); } public void BuildBody() { Console.WriteLine("Build Tall Build Body"); } public void BuildArm() { Console.WriteLine("Build

【设计模式】建造者模式

烂漫一生 提交于 2020-01-14 08:23:16
1、定义 1.1 标准定义   建造者模式( Builder Pattern) 也叫做生成器模式, 其定义如下:   Separate the construction of a complex object from its representation so that the same construction process can create different representations.( 将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示。 ) 1.2 通用类图   在建造者模式中, 有如下4个角色:   ● Product产品类   通常是实现了模板方法模式, 也就是有模板方法和基本方法, 参考模板方法模式。   ● Builder抽象建造者   规范产品的组建, 一般是由子类实现。   ● ConcreteBuilder具体建造者   实现抽象类定义的所有方法, 并且返回一个组建好的对象。   ● Director导演类   负责安排已有模块的顺序。 2、实现 2.1 类图   Builder :定义创建对象过程的抽象,提供构建不同组成部分的接口   其中:BuildPartA,BuildPartB,BuildPartC是对一个对象不同部分的构建函数接口,由Builder的派生类ConcreteBuilder1

设计模式 —— 建造者模式

别等时光非礼了梦想. 提交于 2020-01-12 13:48:27
一.什么是构建者模式: 将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了 复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具 有复合属性的对象。 二.适用场景: 1、隔离复杂对象的创建和使用,相同的方法,不同执行顺序,产生不同事件结果 2、多个部件都可以装配到一个对象中,但产生的运行结果不相同 3、产品类非常复杂或者产品类因为调用顺序不同而产生不同作用 4、初始化一个对象时,参数过多,或者很多参数具有默认值 5、不适合创建差异性很大的产品类产品内部变化复杂,会导致需要定义很多具体建造者类实现变化, 增加项目中类的数量,增加系统的理解难度和运行成本 6、需要生成的产品对象有复杂的内部结构,这些产品对象具备共性 三.主要作用: 在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。 用户只需要给出指定复杂对象的类型和内容; 建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来) 四.解决的问题: 方便用户创建复杂的对象(不需要知道实现过程) 代码复用性 & 封装性(将对象构建过程和细节进行封装 & 复用) 五.优缺点: 优点: 使用建造者模式可以使客户端不必知道产品内部组成的细节。 具体的建造者类之间是相互独立的,这有利于系统的扩展。 具体的建造者相互独立

生成器模式(建造者模式)

亡梦爱人 提交于 2020-01-11 21:03:42
Builder Pattern 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 结构: Builder:抽象建造者 ConcreteBuilder:具体建造者 Director:指挥者 Product:产品角色 ● Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,在该接口中一般声明两类方法,一类方法是buildPartX(),它们用于创建复杂对象的各个部件;另一类方法是getResult(),它们用于返回复杂对象。Builder既可以是抽象类,也可以是接口。 ●ConcreteBuilder(具体建造者):它实现了Builder接口,实现各个部件的具体构造和装配方法,定义并明确它所创建的复杂对象,也可以提供一个方法返回创建好的复杂产品对象。 ●Product(产品角色):它是被构建的复杂对象,包含多个组成部件,具体建造者创建该产品的内部表示并定义它的装配过程。 ● Director(指挥者):指挥者又称为导演类,它负责安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系,可以在其construct()建造方法中调用建造者对象的部件构造与装配方法,完成复杂对象的建造。客户端一般只需要与指挥者进行交互,在客户端确定具体建造者的类型,并实例化具体建造者对象(也可以通过配置文件和反射机制)

C# 建造者模式

守給你的承諾、 提交于 2020-01-11 13:57:52
C# 设计模式之---建造者模式 一、定义: 建造者模式(Builder)是将复杂的构建与其表示相分离,使得同样的构建可以产生不同的表示。 二、原型模式应用: 在软件系统中,有时候面临一个复杂对象的创建工作,该对象通常由各个部分对象用一定算法构成, 或者按一定的步骤组合而成,这些算法和步骤是稳定的,而构成这个对象的子对象却经常由于需求的变化而不断变化。 举个例子,比如一个工厂要生产奔驰和宝马两种车子,它们组装的过程基本都是不变的,都可以由 logo,车身,轮子,椅子等构成,但是这些零件在奔驰和宝马这两种车子之间又是多变的,那么将一些易变的两件与其他部件分离出来,实现解耦合,则可以轻松实现车子的升级。 三、建造者欧式参与者 ①Builder:为创建一个 product对象的各个部件指定抽象接口; ②ConcreateBuilder   1>实现Builder的接口以构造和装配该产品的各个部件   2>定义并明确它所创建的表示 ③Director:构造一个使用Builder接口的对象; ④Product:表示被构造的复杂对象。ConcreateBuilder创建该产品的内部表示并定义它的装配过程。 在建造者模式中,Director规定了创建一个对象所需要的步骤和次序,builder则提供了一些完成这些步骤的方法,ConcreateBuilder给出了这些方法的具有实现

设计模式—建造者模式

随声附和 提交于 2020-01-11 08:02:40
前言 需要创建一个复杂的对象,这个复杂的对象有其他各部分子对象通过一定的步骤组合而成。例如:电脑是一个复杂的对象,由cpu,主板,硬盘,显卡,机箱组成,如果此时让采购员一台台的去组装是不可能的。建造者模式可以解决这个问题,我们可以吧电脑的各个组件的组成过程封装到一个建造者类对象中,建造者只要负责返还给客户端全部组件都建造完毕的对象就可以了。此时只需要和电脑城的老板说自己要采购什么样的电脑就可以了,老板会吧组装好的电脑送到公司 建造者模式介绍 1)实际例子 电脑城老板和客户(采购员)联系,电脑的组装是由老板指挥机装人员去吧电脑的各个组件装起来,真正负责创建产品的人就是电脑城的机装人员 1 //创造者模式:将一个复杂对象的构造与他的标示分离,使得同样的构造过程可以创建不同的表示 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Text; 6 7 namespace ConsoleApplication1 8 { 9 /// <summary> 10 /// 指挥创建过程类 11 /// </summary> 12 public class Director 13 { 14 //组装电脑 15 public void Construct(Builder

设计模式@第8章:建造者模式

喜欢而已 提交于 2020-01-10 22:48:51
第8章:建造者模式 一、盖房项目需求 需要建房子:这一过程为打桩、砌墙、封顶 房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的. 请编写程序,完成需求. 传统方式解决盖房需求 思路分析(图解) 看老师代码的演示 package com.gjxaiou.builder; public abstract class AbstractHouse { //打地基 public abstract void buildBasic(); //砌墙 public abstract void buildWalls(); //封顶 public abstract void roofed(); /** * 在构造方法中调用方法,使其在初始化时候有顺序执行 */ public void build() { buildBasic(); buildWalls(); roofed(); } } 这里以 commonHouse 为例,实现上面的接口,其他实体类类型: package com.gjxaiou.builder; public class CommonHouse extends AbstractHouse { @Override public void buildBasic() { // TODO Auto-generated method stub System

设计模式(五)建造者模式

谁说我不能喝 提交于 2020-01-10 02:49:22
1、简述 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。 2、介绍 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 主要解决:主要解决在软件系统中,有时候面临“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临剧烈的变化,但是将它们组合在一起的算法却相对稳定。 何时使用:一些基本组件不会变,而其组合经常变化的时候。 如何解决:将变与不变分离。 关键代码:建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。 应用实例: 去肯德基,汉堡、可乐、薯条、鸡翅是不变的,而其组合是经常变化的,生成出所谓的套餐。 Java中的StringBuilder 优点: 建造者独立,易拓展。 便于控制细节风险。 缺点: 产品必须有共同点,范围有限。 如内部变化复杂,会有很多建造类。 使用场景: 需要生成的对象具有复杂的内部结构。 需要生成的对象内部熟悉本身相互依赖。 注意事项:与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。 3、实现 我们假设一个快餐店的商业案例,其中

设计模式之建造者模式

杀马特。学长 韩版系。学妹 提交于 2020-01-10 02:48:12
建造者模式--导读   生活中我们经常碰到,餐馆中各种不同的套餐,和各种不同的汽车,但是这些都有一个共同的特性,那就是他们多是由各种部件组成。 就比如在kfc点餐一样,他给你提供很多不同的组合,比如说薯条和饮料和汉堡,薯条和果汁和烤翅,你会发现这些单个的东西都会单买,但是 跟据不同的组合,就形成了五花八门的套餐,这就用到了我们的建造者模式了,用户仅需知道这个套餐是什么,而不需要知道套餐中的具体组合 便可以得到自己想要的套餐,不需要管这其中复杂的组合关系 建造者模式--定义   建造者模式将一个复杂对象的构建过程和表是分开,是的同样的创建过程,通过不同的组合过程可以创建出不同的表示 。   建造者模式构建复杂对象就像造汽车一样,是一个一个组件一个一个步骤创建出来的,它允许用户通过制定的对象类型和内容来创建他们,但是用户并不需要知道这个复杂对象是如何构建的,它只需要明白通过这样做我可以得到一个完整的复杂对象实例 建造者模式--模式结构 一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式的本质是使组装过程(用指挥者类进行封装,从而达到解耦的目的)和创建具体产品解耦,使我们不用去关心每个组件是如何组装的。 建造者模式的实现: ①在建造者模式中,指挥者是直接与客户端打交道的,指挥者将客户端创建产品的请求划分为对各个部件的建造请求

设计模式(五)建造者模式(Builder Pattern)

痴心易碎 提交于 2020-01-09 18:44:22
一、引言   在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成。例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象,它是由CPU、主板、硬盘、显卡、机箱等组装而成的,如果此时让采购员一台一台电脑去组装的话真是要累死采购员了,这里就可以采用建造者模式来解决这个问题,我们可以把电脑的各个组件的组装过程封装到一个建造者类对象里,建造者只要负责返还给客户端全部组件都建造完毕的产品对象就可以了。然而现实生活中也是如此的,如果公司要采购一批电脑,此时采购员不可能自己去买各个组件并把它们组织起来,此时采购员只需要像电脑城的老板说自己要采购什么样的电脑就可以了,电脑城老板自然会把组装好的电脑送到公司。   下面就以这个例子来展开建造者模式的介绍。 二、建造者模式的详细介绍 2.1 建筑者模式的具体实现   在这个例子中,电脑城的老板是直接与客户(也就是指采购员)联系的,然而电脑的组装是由老板指挥装机人员去把电脑的各个部件组装起来,真真负责创建产品(这里产品指的就是电脑)的人就是电脑城的装机人员。理清了这个逻辑过程之后,下面就具体看下如何用代码来表示这种现实生活中的逻辑过程: using System; using System.Collections.Generic; using System.Linq;