关键词:
前言:继续学习设计模式,今天学习建造者模式。
建造者模式(Builder Pattern)
定义
又叫生成器模式。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
设计原则
依赖倒转原则,抽象不应该依赖细节,细节应该依赖抽象。
目的
如果我们用了建造者模式,那么用户就只需要指定需要建造的类型就可以得到他们,而具体建造的过程和细节就不需要知道了。
什么时候使用
主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的(产品对象具有共性),但对象内部的构建通常面临着复杂的变化。
好处
使得建造者代码与表示代码分离,达到解耦。
由于建造者隐藏了该产品是如何组装的,所以若要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了,符合“开闭原则”。
将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,易于精确控制对象的创建。
缺点
建造者模式所创建的产品一般具有较多的共同点,其组成部分相似;如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。
如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。
结构图
基本代码
具体产品
package designpatterns.builder; import java.util.ArrayList; import java.util.List; /** * 具体产品 * @author yule * @date 2018/8/12 13:32 */ public class Product private List<String> parts = new ArrayList<>(); /** * 添加产品部件 * @param part */ public void addPart(String part) parts.add(part); /** * 列举所有产品部件 */ public void show() System.out.println("产品创建:"); for(String part : parts) System.out.println(part);
创建抽象建造者,假设一个产品需要partA,partB组成
package designpatterns.builder; /** * 抽象建造者 * @author yule * @date 2018/8/12 13:36 */ public abstract class Builder public abstract void builderPartA(); public abstract void builderPartB(); public abstract Product getProduct();
创建具体建造者1
package designpatterns.builder; /** * 具体建造者1 * @author yule * @date 2018/8/12 13:37 */ public class ConcreteBuilder1 extends Builder private Product product = new Product(); @Override public void builderPartA() product.addPart("部件A1"); @Override public void builderPartB() product.addPart("部件B1"); @Override public Product getProduct() return product;
创建具体建造者2
package designpatterns.builder; /** * 具体建造者2 * @author yule * @date 2018/8/12 13:39 */ public class ConcreteBuilder2 extends Builder private Product product = new Product(); @Override public void builderPartA() product.addPart("部件A2"); @Override public void builderPartB() product.addPart("部件B2"); @Override public Product getProduct() return product;
创建指挥者,用来指挥创建过程
package designpatterns.builder; /** * 指挥者,用来指挥创建过程 * @author yule * @date 2018/8/12 13:40 */ public class Director public void Construct(Builder builder) builder.builderPartA(); builder.builderPartB();
客户端代码,客户不需要知道具体的建造过程
public static void main(String[] args) Director director = new Director(); Builder builder1 = new ConcreteBuilder1(); director.Construct(builder1); Product product1 = builder1.getProduct(); product1.show(); Builder builder2 = new ConcreteBuilder2(); director.Construct(builder2); Product product2 = builder2.getProduct(); product2.show();
大话设计模式-建造者模式(代码片段)
建造者模式建造者模式又称生成器模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式主要用于创建一些复杂的对象,这些对象内部构构建间的构造顺序通常是稳定的,但对象内... 查看详情
设计模式之建造者模式(创建型)(代码片段)
模式定义建造者模式属于23种设计模式中的创建型模式,可以理解为创建对象的一种很好的方法。所谓建造者模式就是将组件和组件的组件过程分开,然后一步一步建造一个复杂的对象。所以建造者模式又叫生成器模式。建造者... 查看详情
建造者模式(代码片段)
建造者模式标签(空格分隔):设计模式什么是建造者模式Builder模式,建造者模式也叫生成器模式,是GoF提出的23种设计模式中的一种,是一种对象的创建型模式,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽... 查看详情
设计模式——建造者模式(代码片段)
设计模式(九)——建造者模式新专题:设计模式,我会在博客(http://www.hollischuang.com)及微信公众号(hollischuang)同步更新,欢迎共同学习。本文主要介绍创建型模式的最后一种————建造者模式。概念建造者模式(英:BuilderPatt... 查看详情
设计模式随笔:建造者模式(代码片段)
建造者模式(BuilderDesign)定义 把一个复杂对象的构建和表示分离开,使同样的构建构成可以创建不同的表示(官方的定义)UML图说明 抽象建造者接口(Builder):抽象定义的建造者(非必须的)导演角色类(Director... 查看详情
设计模式——建造者模式(代码片段)
什么是建造者建造者模式实际上是常用的设计模式。顾名思义,builder的意思是建造者或者建筑工人,谈到建造自然会想到楼房。楼房是千差万别的,楼房的外形、层数、内部房间的数量、房间的装饰等等都不一样,但是对于建... 查看详情
设计模式—建造者模式(builder)(代码片段)
title:设计模式—建造者模式建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。我们获得一... 查看详情
设计模式----建造者模式(代码片段)
建造者模式介绍角色代码演示通过反射创建建造者对象优点缺点适用场景总结参考文章介绍建造者模式(BuilderPattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种... 查看详情
设计模式之建造者模式(代码片段)
设计模式之建造者模式 建造者模式(BuilderPattern)也叫生成器模式,定义:Separatetheconstructionofcomplexobjectfromitsrepresentationsothatthesameconstructionprocesscancreatedifferentrepresentations.(将一个复杂的对象的构建与它的表示 查看详情
设计模式学习系列——建造者模式(代码片段)
建造者模式 建造者模式(BuilderPattern)使用多个简单的对象一步一步构建成一个复杂的对象。 优点: 1、建造者独立,易扩展。2、便于控制细节风险。 缺点: 1、产品必须有共同点,范围有限制。2、如内... 查看详情
gof设计模式(05)建造者模式(代码片段)
简介一、定义1、概念建造者模式(Builder):将一个复杂对象的构建与它的表示相分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。2、理解将客户端与包含多个组成部分的复杂对象的创建过程... 查看详情
设计模式之建造者模式(代码片段)
本文由老王家组装电脑引出——建造者设计模式,详细介绍建造者模式的基本概念和实现代码,为了便于理解建造者模式,我们会对实际应用中的典型案例进行介绍。最后对比工厂模式和建造者模式之间的区别,让我们在实际使... 查看详情
设计模式之建造者模式(代码片段)
建造者模式1.简要概述2.模式结构3.实现代码4.优点好处5.缺点弊端6.应用场景7.应用示例1.简要概述建造者模式也可以叫做生成器模式。建造者模式就是说首先封装一个对象的构造过程,然后按照这个过程步骤去构建这个对象实... 查看详情
06建造者模式builder(代码片段)
...r模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。 Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地... 查看详情
设计模式之:建造者模式builderpattern的实现(代码片段)
建造者模式相较于工厂模式,用于创建复杂的对象;使用的技术:继承、抽象类、多态、配置文件、反射;建造者模式的设计原则:面向抽象类编程,符合依赖倒置原则;通过配置文件生成具体建造者,替代抽象建造者,符合里... 查看详情
建造者模式(代码片段)
1、建造者模式1.1、什么是建造者模式 建造者模式是将一个产品的内部表象与产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。 1.1.1、内部表象 产品通常会有不同的组成成分作为产... 查看详情
建造者模式(代码片段)
...试题汇总 工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合... 查看详情
死磕设计模式—建造者模式(代码片段)
前言(八问知识体系) 1.1.简介什么是建造模式?1.将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示2.建造者模式是一步一步创建一个复杂的对象,建造者模式注重的是一步一步的创建复... 查看详情