建造者模式 又称为生成器模式(设计模式之禅 101-112页)

定义:

将一个复杂对象的构建与它的表示分开,使得同样的创建过程可以创建不同的表示

在建造者模式中,有如4个角色

Product 产品类

通常是实现了模板方法模式,也就是有模板方法和基本方法

Builder抽象创建者

规范产品的创建,一般由子类实现。

ConcreteBuilder具体创建者

实现抽象类定义的所有方法,并返回一个组建好的对象

Director导演类

负责安排已有的模块顺序,然后告诉Builder开始创建。

产品类

public class Product {public void doSomething(){//独立的业务处理}
}

抽象建造者

public abstract class Builder{//设计产品的不同部分,以获取不同的产品public abstract void setPart();//创建产品public abstract Product builProduct();
}

 具体创建者

public class ConcreteProduct extends Builder {Private Product product = new Product();//设置产品零件public void setPart(){/** 产品类内的逻辑处理*///组建一个产品public Product buildProduct() {return product;}
}

注意:有多少个产品类就有多少个具体的创建者,而且这多个产品类具有相同接口或抽象类

导演类:

public class Director {private Builder builder = new ConcreteProduct();//构建不同的产品public Product getAProduct(){builder.setPart();/** 设置不同的零件,产生不同的产品*/return builder.buildProduct();}
}

优点:

封装性

使用建造者模式可以使客户端不必知道产品内部组成的细节,如例子中我们就不需要关心每一个具体的模型内部是如何实现的,产生的对象类型就是Product。

建造者独立,容易扩展

每个建造者相互独立,对系统的扩展非常有利

便于控制细节风险

由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何的影响

使用场景

相同的方法,不同的执行顺序,产生不同的事件结果时,可以采用建造者模式

多个部件或者零件,都可以装配到一个对象中,但是产生的结果又不相同时

产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能

建造者模式和工厂方法非常相似,但是建造者模式最主要的功能是基本方法的调用顺序安排,也就是这些基本方法已经实现了,通俗来说就是零件的装配,顺序不同产生的对象也不同;而工厂方法则重点是创建,创建零件是它的主要职责,组装顺序则不是它关心的。

示例代码:

//抽象产品类
public abstract class AbstractProduct {ArrayList<String> list =  new ArrayList();protected abstract void open();protected abstract void close();protected abstract void music();public final void run (){int size = this.list.size();for (int i=0; i<size;i++ ){String actionName = this.list.get(i);if (actionName.equalsIgnoreCase("open")){this.open();}else if (actionName.equalsIgnoreCase("close")){this.close();}else if (actionName.equalsIgnoreCase("music")){this.music();}}}public  final void setList(ArrayList<String> list){this.list = list;}
}

//产品类
public class Product  extends AbstractProduct{@Overridepublic void open(){System.out.println("打开手机");}@Overridepublic void close(){System.out.println("关闭手机");}@Overridepublic void music(){System.out.println("听音乐");}}
//抽象建造者
public abstract class Builder {//设计产品的不同部分,以获取不同的产品public abstract void setPart(ArrayList<String> list);//创建产品public abstract AbstractProduct builProduct();
}
//具体建造者
public class ConcreteProduct extends Builder{private AbstractProduct product = new Product();@Overridepublic void setPart(ArrayList<String> list) {this.product.setList(list);}@Overridepublic AbstractProduct builProduct() {return this.product;}
}
//导演类
public class Director {private ArrayList<String> list = new ArrayList<>();private Builder builder = new ConcreteProduct();//只开机和关机public AbstractProduct getMethod1(){this.list.clear();list.add("open");list.add("close");builder.setPart(list);return  builder.builProduct();}//只开机和听音乐public AbstractProduct getMethod2(){this.list.clear();list.add("open");list.add("music");builder.setPart(list);return  builder.builProduct();}//开机,关机,听音乐public AbstractProduct getMethod3(){this.list.clear();list.add("open");list.add("close");list.add("music");builder.setPart(list);return  builder.builProduct();}
}
public class main {public static void main(String[] args) {Director director = new Director();director.getMethod1().run();System.out.println("----------------");director.getMethod2().run();System.out.println("----------------");director.getMethod3().run();}
}

由于demo代码比较多 如果需要的话 可以去下载我写的demo

demo: https://gitee.com/minstrel01/Design-Pattern-demo.git builder_pattern

《设计模式之禅》-建造者模式相关推荐

  1. 设计模式之路 | 建造者模式

    模式的定义与特点 建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式.它是将一个复杂的对象分解为多个简单的对象 ...

  2. 设计模式系列之建造者模式构建实体类

    设计模式系列之建造者模式(Build Pattern)构建实体类 模式定义 建造者模式属于23种设计模式中的创建型模式,可以理解为创建对象的一种很好的方法. 所谓建造者模式就是**将组件和组件的组件过 ...

  3. 设计模式---5(建造者模式的概念及其实现,建造者模式的角色与职责,建造者模式和工厂模式的区别)

    建造者模式 建造者模式的概念 Builder 模式也叫建造者模式或者生成器模式,是由 GoF 提出的 23 种设计模式中的一种. Builder 模式是一种对象创建型模式之一,用来隐藏复合对象的创建过 ...

  4. Java 设计模式情景分析——建造者模式

    当我们遇到类似汽车的装配,需要车轮.方向盘.发动机,还有各种小零件时,为了在构建过程中隐藏实现细节,就可以使用建造者模式 (Builder模式) 将部件和组装过程分离,使得构建过程和部件都可以自由扩展 ...

  5. 设计模式二:建造者模式

    建造者模式 想要创建一个由多个部分构成的对象,而且他的构成需要一步接一步地完成.只有当各个部分都创建好,这个对象才是完整的.这时就需要建造者模式 建造者设计模式:将一个复杂对象的构造过程与其表现分离, ...

  6. Java设计模式10,建造者模式

    目录 一.建造者模式 二.建造者模式的结构 1.抽象建造者(Builder) 2.具体建造者(ConcreteBuilder) 3.指挥者(Director) 4.产品(Product) 三.建造者模 ...

  7. 【设计模式自习室】建造者模式

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该设计模式的详细介绍,包括: 引子,意图(大白话解释) 类图,时序图(理论规范) 该模式的代码示例: ...

  8. 设计模式 之美 -- 建造者模式

    文章目录 1. 解决问题 2. 应用场景 3. 实现 C语言实现 C++实现 4. 缺点 1. 解决问题 描述如下场景: 类的数据成员很多(8个以上),当我们进行初始化的时候放在初始化列表中,影响类的 ...

  9. 设计模式入门:建造者模式

    UML类图 建造者模式 代码示例 Product /*** 表示具体的产品,由多个部件组成*/ public class Product {/*** 存放产品每个部件的集合*/private List ...

  10. Net设计模式实例之建造者模式(Builder Pattern)(2)

    四.案例分析(Example) 1.场景 假设房子只有房顶和墙(Roof And Walls)<?XML:NAMESPACE PREFIX = O /> Jane和 Joe两个客户需要从建 ...

最新文章

  1. Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍
  2. 《系统集成项目管理工程师》必背100个知识点-30工作分解结构(WBS)分解形式
  3. Linux问题分析与性能优化
  4. python测试代码性能_使用python timeit 模块检测代码性能
  5. linux tcp在传输数据的时候断网了_选择最合适的协议 让传输数据更灵敏
  6. 2019蓝桥杯省赛---java---C---9(等差数列)
  7. 被裁半年后进大厂,他咋做到的?
  8. UTF-8, ASCII, Unicode的介绍与区分
  9. UVA 10118 Free Candies
  10. [转]《编程之道》(很老的一篇文章)
  11. python飞机大战游戏素材_python实现飞机大战小游戏
  12. Servlet的原理是什么?
  13. Post 请求调试工具简介
  14. 人脸识别项目的测试用例
  15. python教你生成动态二维码
  16. 队列练习之Example004-设计一个循环队列,用 front 和 rear 分别作为队头和队尾指针,另外用一个标志 tag 表示队列是空还是不空
  17. 有 1000 瓶药物,但是其中有一瓶是有毒的,老鼠只要服用任意量有毒药水就会在一个星期内死掉!请问,在一个星期后找出有毒的药物,最少需要多少只小白鼠?
  18. Timus Online Judge 2045 Richness of words
  19. Python之Scikit-Learm
  20. 一键连接wifi就靠它,还能查看wifi密码

热门文章

  1. 1.pymysql Warning: (1366, Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' 解决办法
  2. “听声避险”?这个AI可精确辩声 帮助防盗和规避交通事故
  3. spaceclaim脚本(内摆线)
  4. 核心案例|国防科技大学虚实结合的无人机集群系统
  5. vue项目中Des的加密解密
  6. DCDC电源测试以及纹波测试方法
  7. 生鲜蔬菜生产称重管理系统
  8. vue 里怎么用 lottie-web 实现动画效果?
  9. 计算机应用基础word优质课,《计算机应用基础》公开课教案
  10. php php_zip.dll,php_zip.dll下载|