Builder(生成器)

意图:将一个复杂对象的构建与它的表示相分离,使得同样的构建过程可以创建不同的表示。
在以下情况使用Builder模式

  • 当创建复杂的对象应该独立于该对象的组成部分以及它们的装配方式时。
  • 当构造过程必须允许被构造的对象有不同的表示时。

结构图

builder模式更注重与一个复杂对象的创建,像组装一样,一层一层,一个模块一个模块的装配,是一个由简单对象到复杂对象的过程。
假设现在去淘宝请人组装机子,一台好的(goodcomputer),一台差的(badcomputer)
Direct 导向器就像淘宝商家,你给他套餐(good or bad Builder)订单,剩下的准备材料和组装过程你就没必要知道了,只要下单就行,然后根据订单收货。

Computer(省略get set)

public  class Computer {private String cpu;private String gpu;private String memory;private String keyboard;private String mouse;

builder 接口

public class ComputerDirector {public void create(ComputerBuilder builder){builder.builder();}
}

bad套餐

public class BadBuilder extends ComputerBuilder {private Computer computer ;@Overridevoid builder() {computer = new Computer();computer.setCpu("i3-3");computer.setGpu("760");computer.setMouse("双飞燕");computer.setKeyboard("双飞燕");computer.setMemory("4G");}public Computer getComputer(){return computer;}
}

good套餐


public class GoodBuilder extends ComputerBuilder {private Computer computer ;@Overridevoid builder() {computer = new Computer();computer.setCpu("i9-10");computer.setGpu("2060");computer.setKeyboard("机械");computer.setMemory("16GSSD");computer.setMouse("电竞鼠");}public Computer getComputer(){return computer;}
}

Director 导向器,执行builder的组装

public class ComputerDirector {public void create(ComputerBuilder builder){builder.builder();}
}

client

public class Client {public static void main(String[] args) {ComputerBuilder good = new GoodBuilder();ComputerDirector computerDirector = new ComputerDirector();computerDirector.create(good);Computer computer = ((GoodBuilder) good).getComputer();System.out.println(computer);}
}

更加常用的方式

构造参数过多时可以用builder构造
Computer

public  class Computer {private String cpu;private String gpu;private String memory;private String keyboard;private String mouse;public Computer(Builder builder){this.cpu = builder.cpu;this.gpu = builder.gpu;this.memory = builder.memory;this.keyboard = builder.keyboard;this.mouse = builder.mouse;}@Overridepublic String toString() {return "Computer{" +"cpu='" + cpu + '\'' +", gpu='" + gpu + '\'' +", memory='" + memory + '\'' +", keyboard='" + keyboard + '\'' +", mouse='" + mouse + '\'' +'}';}static class Builder{private String cpu;private String gpu;private String memory;private String keyboard;private String mouse;public  Builder(String cpu,String gpu,String memory){this.cpu=cpu;this.gpu=gpu;this.memory=memory;}public Builder keyboard(String keyboard){this.keyboard = keyboard;return this;}public Builder mouse(String mouse){this.mouse=mouse;return this;}public Computer builder(){return new Computer(this);}}}
public class client {public static void main(String[] args) {Computer computer = new Computer.Builder("i9","2060","16G").keyboard("机械").mouse("电竞鼠").builder();System.out.println(computer);}
}

GOF 设计模式 builder模式笔记相关推荐

  1. GOF 设计模式Facade模式 笔记

    Facade(外观) 意图:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 结构图 在以下情况使用: 当你要为一个复杂子系统提供一个简 ...

  2. GOF 设计模式 Decorator模式 笔记

    Decorator(装饰) 意图:动态的给一个对象添加一些额外的职责.就添加功能来说,Decorator模式相比生成子类更为灵活 结构图: 在以下情况适合使用 在不影响其他对象的情况下,以动态,透明的 ...

  3. GOF对Builder模式的定义(转载)

    (1)意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. (2)适用性 1. 当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式: 2. 当构造过程必须允许 ...

  4. 设计模式-Builder模式

    目录 一个例子(做汤) 人工做汤 机器做汤(使用Builder模式) 优缺点 优点 缺点 Builder模式属于创建型模式. 它是将一个复杂对象的构建过程隐藏起来,让使用者只关系自己要生成什么样的对象 ...

  5. 设计模式--builder 模式

    设计模式–builder 模式 说明 @author JellyfishMIX - github / blog.jellyfishmix.com LICENSE GPL-2.0 本文默认已经知道了 b ...

  6. Java设计模式——Builder模式

    前言 之前写Android程序的时候,经常会用到Dialog(对话框)这个控件.我们在使用Dialog,比如AlertDialog的时候就用到了这里要说明的Builder模式.现在我们来看一下这样的一 ...

  7. 设计模式 —— Builder 模式

    文章目录 1 Builder 模式的核心思想 2 第一种 Builder 模式 3 第一种模式的困惑 4 第二种 Builder 模式 5 第二种 Builder 模式见解 6 参考 1 Builde ...

  8. Java 常用设计模式 -- Builder模式

    Builder模式是在Java中最流行的模式之一.它很简单,有助于保持对象不可变,并且可以使用Project Lombok的@Builder或Immutables等工具生成,仅举几例. 模式的流畅变体 ...

  9. java的设计模式 - Builder模式

    Builder 模式的目的? 构造对象的方式过于复杂,不如将之抽离出来.比如,构造器参数过多 这样说也有点抽象,举个例子吧. 举个例子 比如 非常热门的消息队列RabbitMQ 的 AMQP.Basi ...

最新文章

  1. AI一分钟 | 贾跃亭宣布FF开工,并在京沪展开招聘,回国在望?;亚马逊CEO贝佐斯搭伴波士顿动力机器狗参会
  2. C语言写一函数交换两变量的值
  3. zabbix客户端安装二
  4. 发送电子邮件模块smtplib
  5. 基本ACL与高级ACL
  6. linux Makefile编写的整理
  7. (本地源)安装CDH Manager
  8. 如何实现滑动scrollview上下隐藏
  9. 顺序表基本操作在主函数中的实现
  10. 多线程的全局变量与局部变量
  11. linux服务器运维操作命令,Windows和Linux系统服务器运维基本操作指令
  12. python正则匹配表达式(1)
  13. VB.Command()的参数
  14. bzoj 1093 [ ZJOI 2007 ] 最大半连通子图 —— 拓扑+DP
  15. 注册表删除计算机用户密码,修改注册表删除WIN10开机密码
  16. Diablo3狗熊榜
  17. 无线网卡wifi无法启用
  18. 固态硬盘基础知识,了解一下
  19. linux 报错:http://people.centos.org/tru/devtools-2/7/x86_64/RPMS/repodata/repomd.xml: [Errno 14]
  20. Android App的国际化-各国语言缩写

热门文章

  1. python中的groupby方法详解
  2. semilogx 多条曲线_如何在matlab同一个图形上绘制多条曲线?
  3. 全球速度最快人工智能垃圾分拣机器人火爆环博会
  4. LTE(4G) VOLTE协议栈架构
  5. return返回值的含义
  6. 【案例】【目标成本编制】利用docx-mailmerge与xlwings实现excel与word自动化办公,节省重复编制文件的时间
  7. 关于NOIP—信息学奥赛,多的是你不知道的事!
  8. 温湿度传感器调研报告
  9. 别闹,买图片根本不贵,但前提…
  10. win10任务栏透明及网速,cpu、内存占用显示