设计模式之构建者(Builder)模式】的更多相关文章

在五大设计原则的基础上经过GOF(四人组)的总结,得出了23种经典设计模式,其中分为三大类:创建型(5种).结构型(7种).行为型(11种).今天对创建型中的构建者(Builder)模式的思想进行了一下复习和实践,在此做一下记录.理解或实践不到位的地方,希望走过路过的看官指正一下! 先来看看构建者(Builder)模式的定义: Separate the construction of a complex object from its representation,so that the sam…
了解了单例模式,接下来介绍另一个常见的模式--Builder模式. 那么什么是Builder模式呢.通过搜索,会发现大部分网上的定义都是 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 但是看完这个定义,依然不知道什么是Builder设计模式.不要过度在意其定义,定义往往是比较抽象的,学习它最好的例子就是通过样例代码. 我们通过一个例子来引出Builder模式.假设有一个Person类,我们通过该Person类来构建一大批人,这个Person类里有很多属性,最常见的比如…
[作者:byeyear    Email:byeyear@hotmail.com    首发:cnblogs    转载请注明] 在本文的开头,先森森的鄙视下自己……将Builder模式反反复复读了七八遍,才敢说自己对其有了初步的了解.这比花在Abstract Factory上的时间长多了.如果GoF将Builder模式放在第一个讲,估计我就会把这本书归结成天书直接扔一边了. Builder模式的关键在于,将“要做什么”与“做出来”分离,将“如何装配”与“完成装配”分离: Director知道“…
Builder模式,从这个名字我们可以看出来,这种设计模式就是用于组装具有复杂结构的实例的. 下面还是以一个实例程序来解释这种设计模式,先看实例程序的类图. 这里为了调试方便,只实现其中一个功能TextBuilder,剩下的HTMLBuilder可自行编写. 然后是实例程序代码. package BigJunOba.bjtu.Builder; public abstract class Builder { public abstract void makeTitle(String title);…
effective java p9 JavaBeans模式阻止了把类做成不可变的可能,这需要程序员付出额外的努力来确保它的线程安全.…
在五大设计原则的基础上经过GOF(四人组)的总结,得出了23种经典设计模式,其中分为三大类:创建型(5种).结构型(7种).行为型(11种).今天对创建型中的工厂方法(FactoryMethod)模式的思想进行了一下复习和实践,在此也做一下记录.同样,理解或实践不到位的地方,希望走过路过的看官指正一下! 同样先来看看工厂方法(FactoryMethod)模式的定义: Define an interface for creating an object, but let subclasses de…
构建者(Builder)设计模式(又叫生成器设计模式): 当一个类的内部数据过于复杂的时候(通常是负责持有数据的类,比如Config.VO.PO.Entity...),要创建的话可能就需要了解这个类的内部结构,还有这些东西是怎么组织装配等一大坨乱七八糟的东西,这个时候就会增加学习成本而且会很混乱,这个时候就想啊想一种什么法子来管理一下这个类中的数据呢,怎么在创建的时候让它按部就班的来,并且代码可读性很好别让我看花了眼啊,我要的东西也能都很好设置进来,这就是Builder模式的应用场景,Build…
前言 近日,看到Myabtis中组件中SqlSessionFactory由SqlSessionFactoryBuilder().build()生成时,且采用Builder模式,遂记录学习之. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 1.什么是Builder模式? (1)对于复杂的对象,如果只是用构造方法创建的话,构造方法中会存在很多的逻辑,那么我们可以一步步有…
建造者模式(Builder Pattern) ——.NET设计模式系列之四 Terrylee,2005年12月17日 概述 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定.如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式. 本文通过现实生活中的买…
一.Builder模式 二.使用例子 三.Spring中的Builder模式 Builder模式,构建者.构造者模式,在<图解设计模式>中归为 生成实例 一栏,该模式用于组装具有复杂结构的实例: 当需要逐步获取对象的初始值时,可以使用Builder模式: 一.Builder模式角色 Builder:建造者,Builder角色负责定义用来生成实例的接口API,Builder角色中准备了用于生成实例的具体方法: ConcreteBuilder:具体的建造者,负责实现Builder接口的的类,定义了…
目录 由来 使用 1. 定义抽象 Builder 2. 定义具体 Builder类 3. 定义具体 Director类 4. 测试 定义 文字定义 结构图 优点 举例 @ 最近在看Mybatis的源码, 在阅读解析 XML 配置文件的过程中, 发现使用到了建造者(Builder)模式. 因此, 打算重温一下该设计模式. 由来 假设我们需要画一个小人, 我们可能会有以下的构造函数定义: public Person(HeadType headType, HairType hairType, Hair…
Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.用户不知道内部的具体构建细节.Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到. 为何使用建造者模式 是为了将构建复杂对象的过程和它的部件解耦.注意:是解耦过程和部件. 因为一个复杂的对象,不但有很多大量组成部分,如汽车,有很多部件:车轮.方向盘.发动机,还…
看了好几处关于builder模式的书和博客,总感觉不是很清楚,感觉不少书上的说的也不是很准确.最后还是看回圣经<设计模式>.看了好久终于感觉明白了一点了. 意图: builder模式提出的目的就是为了解决将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不的表示的问题. 我们来看一个例子: 假设我们要画一些人,例如游戏里面的各类人.一般情况下,人有头,手,腿.但是在游戏里面,人可能没有手,也可能不止两只手.即所谓的三头六臂.如下: 那么,在这种情况下应该怎么去生产这些人? 一开始可…
Java设计模式之builder模式 今天学mybatis的时候,知道了SQLSessionFactory使用的是builder模式来生成的.再次整理一下什么是builder模式以及应用场景. 1. builder简介 builder模式也叫建造者模式,builder模式的作用将一个复杂对象的构建与他的表示分离,使用者可以一步一步的构建一个比较复杂的对象. 2. 代码实例 我们通常构造一个有很多参数的对象时有三种方式:构造器重载,JavaBeans模式和builder模式.通过一个小例子我们来看…
我们在构建一个MAP时,要不停的调用put,有时候看着觉得很麻烦,刚好,看了下builder模式,觉得这思路不错,于是乎,照着用builder模式写了一个构建MAP的示例,代码如下: import java.util.HashMap; import java.util.Map; public class MapBuilder<T> { public Builder<T> b; public MapBuilder(Builder<T> b){ this.b = b; }…
(http://blog.csdn.net/hguisu/article/details/7518060) 1. 概述 在软件开发的过程中,当遇到一个"复杂的对象"的创建工作,该对象由一定各个部分的子对象用一定的算法构成,由于需求的变化,复杂对象的各个部分经常面临剧烈的变化,但将它们组合在一起的算法相对稳定. 例子1:买肯德基 典型的儿童餐包括一个主食,一个辅食,一杯饮料和一个玩具(例如汉堡.炸鸡.可乐和玩具车).这些在不同的儿童餐中可以是不同的,但是组合成儿童餐的过程是相同的.   …
https://github.com/simple-android-framework/android_design_patterns_analysis/tree/master/builder/mr.simple 1. 模式介绍 模式的定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 模式的使用场景 相同的方法,不同的执行顺序,产生不同的事件结果时: 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时: 产品类非常复杂,或者产品类中的调用顺序不同…
一.感性认识 二.Builder模式 1.定义 一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.即构建过程相同,但是子部件却不相同. 2.结构说明 Builder: 创建者接口(也可定义为抽象类),定义创建一个Product对象的所需各个部件的操作 ConcreteBuilder: 具体的创建者实现,实现各个部件的创建并负责组装Product对象的各个部件:同时提供一个让用户访问的组装完成的Product对象的方法 Director: 导向者,主要用来使用Builder接…
Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.用户不知道内部的具体构建细节.Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到. 为何使用建造者模式 是为了将构建复杂对象的过程和它的部件解耦.注意:是解耦过程和部件. 因为一个复杂的对象,不但有很多大量组成部分,如汽车,有很多部件:车轮.方向盘.发动机,还…
1. 概述 在软件开发的过程中,当遇到一个“复杂的对象”的创建工作,该对象由一定各个部分的子对象用一定的算法构成,由于需求的变化,复杂对象的各个部分经常面临剧烈的变化,但将它们组合在一起的算法相对稳定. 例子1:买肯德基 典型的儿童餐包括一个主食,一个辅食,一杯饮料和一个玩具(例如汉堡.炸鸡.可乐和玩具车).这些在不同的儿童餐中可以是不同的,但是组合成儿童餐的过程是相同的.        客户端:顾客,想去买一套套餐(这里面包括汉堡,可乐,薯条),可以有1号和2号两种套餐供顾客选择.      …
我们通过一个例子来引出Builder模式.假设有一个Person类,我们通过该Person类来构建一大批人,这个Person类里有很多属性,最常见的比如name,age,weight,height等等,并且我们允许这些值不被设置,也就是允许为null,该类的定义如下. 1234567891011121314151617181920212223242526272829303132333435363738 public class Person { private String name; priv…
No1: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 No2: 在Android源码中,最常用到的Builder模式就是AlertDialog.Builder No3: WindowManager在java层的具体实现是WindowManagerImpl,Window对象的setWindowManager函数将Window对象与WindowManager建立了联系 添加View.移除View.更新View的布局等具体的工作都交给了WindowManagerGloba…
设计模式:Builder模式 一.前言    今天我们讨论一下Builder建造者模式,这个Builder,其实和模板模式非常的像,但是也有区别,那就是在模板模式中父类对子类中的实现进行操作,在父类之中进行一件事情的处理,但是在Builder模式之中,父类和子类都不用关心怎么处理,而是用另一个类来完成对这些方法的有机组合,这个类的职责就是‘监工’,规定了到底要怎么样有机的组合这些方法.在监工类(Director)中,将父类组合进去,然后调用父类的操作来抽象的实现一件事情,这就是面向接口(抽象)变…
设计模式之建造者(Builder)模式 存在一些情况,比如,一些对象会有一些重要的属性,在这些属性没有恰当的值之前,对象不能作为一个完整的产品使用(如一个电子邮件最起码得有收件人地址):还有一些些情况,一个对象的一些属性必须按照一定的顺序赋值才有意义,在某个属性没有赋值之前,另一个属性则无法赋值.Builder模式非常适用于此种类型的情况. (一)什么是Builder模式 Builder模式是一种对象创建模式,用来隐藏复合对象的创建过程.建造者模式利用一个导演者(Director)对象和具体构造…
一. 概述 Builder 模式要解决的问题是:当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成),我们要要复杂对象的创建过程和这个对象的表示(展示)分离开 来,这样做的好处就是通过一步步的进行复杂对象的构建,由于在每一步的构造过程中可以引入参数,使得经过相同的步骤创建最后得到的对象的展示不一样. 二. 举例 KFC 与 Mcdonalds 的汉堡生成过程大致都是一样的,假设分为4个步骤: 但是 KFC 与 Mcdonalds 的汉堡味道有所差别,主要是在每一步的细节上有所不同.…
目录 示例程序 类图 代码 角色 思路拓展 谁知道什么 构造和实现分离 和Template Method模式的区别和联系? Builder模式即建造者模式,利用这个模式可以组装具有复杂结构的实例. 示例程序 使用Builder模式创建一个文档,文档有标题,句子和几个条目. Builder是抽象类,定义了文档的结构.继承Builder的子类实现了具体的方法. 我们定义了两个Builder的子类:TextBuilder和MarkdownBuilder,分别构造txt文档和markdown文档. 类图…
Builder模式要解决的问题是,当我们要创建很复杂的对象时,有时候需要将复杂对象的创建过程和这个对象的表示分离开来.由于在每一步的构造过程中可以映入不同参数,所以步骤相同但是最后的对象却不一样.也就是说将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象.       Builder模式的关键在于在创建一个复杂对象时,其组合过程往往涉及复杂的处理,同时,这种职责的分离使得修改复杂对象的组合逻辑变得独立而简单.   以下为实现代码:实现的比较简单:    …
1.Java Builder模式主要是用一个内部类去实例化一个对象,避免一个类出现过多构造函数,而且构造函数如果出现默认参数的话,很容易出错. public Person(String name) Person(String name, int age) Person(String name, int age, boolean sex) 2.Android OkHttp框架中Request.Response类都使用了Java Builder模式. 3.下面举一个小例子: /** * @autho…
Builder 模式的目的? 构造对象的方式过于复杂,不如将之抽离出来.比如,构造器参数过多 这样说也有点抽象,举个例子吧. 举个例子 比如 非常热门的消息队列RabbitMQ 的 AMQP.BasicProperties 因为它的属性比较多,所以构造函数也是挺吓人的. 我看到也不太想调用. 如果现在要构造一条消息 投递模式(delivery mode)为 2 优先级(priority)是 2 content-type 为 text/plain 在没有 builder 模式之前,是这样构造的 n…
一,工厂方法模式和单例模式 工厂方法模式中有一个抽象的工厂接口和一个抽象的产品接口.然后,具体的工厂实现抽象工厂并负责生产具体的产品.由客户端决定 new 哪个具体的工厂,从而生产哪种产品. 因此,与简单工厂模式相比,工厂方法将产品的选择判断交给了客户端.而简单工厂则是通过客户端传过来的生产哪种产品的类型通过 switch-case 在简单工厂中判断要生产哪种产品. 比如,对于Job而言,有编译作业和普通用户作业,如下:…