建造者

创建型模式之建造者模式

≡放荡痞女 提交于 2020-04-08 06:52:09
今天,刚刚做的新需求已经测试了,比较闲。抽空学习设计模式,充实自己啦。     建造者模式其实就是通过多个简单的对象构建复杂的对象。它是一种创建对象的最佳方式,但是它独立与其他对象。包含了建造者和导演。建造者创建和提供实例,导演:管理建造出来的实例的依赖关系。     应用实例:去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"。     优点:建造者独立,易扩展,便于控制     缺点:产品必须有共同点,范围有限制。如果内部变化复杂会有很多的建造类。     实现:     我们假设一个快餐店的商业案例,其中,一个典型的套餐可以是一个汉堡(Burger)和一杯冷饮(Cold drink)。汉堡(Burger)可以是素食汉堡(Veg Burger)或鸡肉汉堡(Chicken Burger),它们是包在纸盒中。冷饮(Cold drink)可以是可口可乐(coke)或百事可乐(pepsi),它们是装在瓶子中。 我们将创建一个表示食物条目(比如汉堡和冷饮)的 Item 接口和实现 Item 接口的实体类,以及一个表示食物包装的 Packing 接口和实现 Packing 接口的实体类,汉堡是包在纸盒中,冷饮是装在瓶子中。 然后我们创建一个 Meal 类,带有 Item 的 ArrayList 和一个通过结合 Item 来创建不同类型的 Meal

4,建造者模式

♀尐吖头ヾ 提交于 2020-04-06 11:53:28
一,什么是建造者模式 Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。 二,例子 四个要素 产品类 :一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。 抽象建造者 :引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。 具体建造者 :实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。 导演类 :负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。 具体产品类 House : /** * * @类名称:House * @类描述:具体产品 * @创建人:zender */ public class House { // 地板 private String floor; // 墙 private String

建造者模式(Builder Pattern)

谁都会走 提交于 2020-04-06 06:05:13
转载自 Terrylee http://terrylee.cnblogs.com/archive/2005/12/19/299878.html 概述 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式。 本文通过现实生活中的买 KFC 的例子,用图解的方式来诠释建造者模式。 意图 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 模型图 生活中的例子 生成器模式将复杂对象的构建与对象的表现分离开来,这样使得同样的构建过程可以创建出不同的表现。这种模式用于快餐店制作儿童餐。典型的儿童餐包括一个主食,一个辅食,一杯饮料和一个玩具(例如汉堡、炸鸡、可乐和玩具车)。这些在不同的儿童餐中可以是不同的,但是组合成儿童餐的过程是相同的。无论顾客点的是汉堡,三名治还是鸡肉,过程都是一样的。柜台的员工直接把主食,辅食和玩具放在一起。这些是放在一个袋子中的。饮料被倒入杯中,放在袋子外边。这些过程在相互竞争的餐馆中是同样的。 实现过程图解 在这里我们还是以去 KFC 店买套餐为例子

.NET设计模式 第二部分 创建型模式(3)—建造者模式(Builder Pattern)

本小妞迷上赌 提交于 2020-04-06 05:49:36
建造者模式(Builder Pattern) ——.NET设计模式系列之四 Terrylee,2005年12月17日 概述 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式。 本文通过现实生活中的买KFC的例子,用图解的方式来诠释建造者模式。 意图 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 模型图 生活中的例子 生成器模式将复杂对象的构建与对象的表现分离开来,这样使得同样的构建过程可以创建出不同的表现。这种模式用于快餐店制作儿童餐。典型的儿童餐包括一个主食,一个辅食,一杯饮料和一个玩具(例如汉堡、炸鸡、可乐和玩具车)。这些在不同的儿童餐中可以是不同的,但是组合成儿童餐的过程是相同的。无论顾客点的是汉堡,三名治还是鸡肉,过程都是一样的。柜台的员工直接把主食,辅食和玩具放在一起。这些是放在一个袋子中的。饮料被倒入杯中,放在袋子外边。这些过程在相互竞争的餐馆中是同样的。 实现过程图解 在这里我们还是以去KFC店买套餐为例子,示意图如下: 客户端:顾客

建造者模式

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

建造者模式

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

设计模式学习心得<建造者 Builder>

十年热恋 提交于 2020-04-06 03:44:36
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。 这种一步一步构造最终的对象的方式叫做 柯里化 (Currying) 。 概述 意图: 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 主要解决: 主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成; 由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。 拆解产品的实现过程,让我联想到了敏捷开发。 何时使用: 一些基本部件不会变,而其组合经常变化的时候。 如何解决: 将变与不变分离开。 关键代码: 建造者:创建和提供实例 导演:管理建造出来的实例的依赖关系。 应用实例: 去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"。 JAVA 中的 StringBuilder。 优点: 建造者独立,易扩展。 便于控制细节风险。 缺点: 产品必须有共同点,范围有限制。 如内部变化复杂,会有很多的建造类。 使用场景: 需要生成的对象具有复杂的内部结构。 需要生成的对象内部属性本身相互依赖。

建造者模式

送分小仙女□ 提交于 2020-04-06 03:43:34
今天复习了下建造者模式,总结下 官方释义: 建造者模式(Builder),将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示 对于复杂对象的创建,如果其创建过程是稳定的,但内部表现却有不同形式(比如,建造一个人,都有头、身体、左臂右臂、左腿右腿四部分,但表现形式却不同:瘦人、胖人、高人、矮人等),这就可以考虑使用建造模式:将建造过程抽象出来,具体建造过程基于抽象的建造过程就不会丢掉某一建造步骤,而客户端只需调用指挥者类、传入具体表现形式(瘦人、胖人、高人...),至于具体的建造细节客户端无需关注:你要胖人,我返回给你胖人,要瘦人我返回给你具体的瘦人,怎样造的?你不会关心 事例代码: 1.产品类:即要构建的具体产品 1 /// <summary> 2 /// 产品类 3 /// </summary> 4 class Product 5 { 6 //产品的多个部件 7 IList<string> parts = new List<string>(); 8 9 //添加产品部件方法 10 public void Add(string part) 11 { 12 parts.Add(part); 13 } 14 15 /// <summary> 16 /// 展示产品部件 17 /// </summary> 18 public void Display() 19 {

设计模式-建造者模式JAVA实现

谁说胖子不能爱 提交于 2020-04-04 20:22:24
建造者模式就是 接口规定了要完成的动作(也就是方法),然后有各个实现类针对这些方法分别进行各自具体的实现。 个人理解其与模板模式最主要的区别就是模板模式会有一个以final定义的方法来规定其必须要完成的动作流程,这个流程不允许被其子类所修改。而建造者模式没有这个约束,只要实现接口规定的方法建即可。 也就是说模板模式隐含一个流程性,而建造者模式没有固定的流程性 下边还是仓库拣货为例简单说明建造者模式 仓库拣货时一般是多张出库单同时拣货,那么一般会根据客户的情况有至少两种拣货任务与拣货列表的生成方式。 一个是合并拣货。所有客户(X,Y,Z)要拣的A品一共3箱4盒,那就可能生成两个拣货列表(一个3箱,一个4盒)和一个拣货任务(a人员去同时拣这两个列表指定的SKU) 另一个是分别拣货,所有客户(X,Y,Z)对要拣的A品可能生成了4个拣货列表(X客户1箱,Y客户1箱,Z客户1箱,Z还有4盒)和2个拣货任务(a人员在整货区拣所有的整箱,b人员在散货区拣散盒) 那么在实际生成时就可以先定义一个统一的接口 package builder; import java.util.List; import bean.PickDoc; import bean.PickList; import bean.PickTask; /** 定义要完成的动作 @author mas */ public

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

空扰寡人 提交于 2020-03-28 10:52:02
title: 设计模式—建造者模式 建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。我们获得一个对象的时候不是直接new这个对象出来,而是对其建造者进行属性设置,然后建造者在根据设置建造出各个对象出来。建造者模式又可以称为生成器模式。 模式结构 一个标准的建造者模式包含如下角色: Builder:抽象建造者 ConcreteBuilder:具体建造者 Director:指挥者 Product:产品角色 源码导读 建造者模式使用比较简单,场景也比较清晰。protobuf中protobuf对应的java类就是使用建造者模式来创建对象的。 public static PersonEntity.Person create() { PersonEntity.Person person = PersonEntity.Person.newBuilder() .setId(1) .setName("Pushy") .setEmail("1437876073@qq.com") .build(); System.out.println(person); return person;} 一般建造者模式结合 链式编程 来使用,代码上更加美观。 spring security