目录

案例一

案例二


使用场景:当构建一个复杂的对象需要传入很多参数的时候,或者是一个对象的属性有很多,但是使用时也许只需要这个对象的几个属性,如果使用构造器的话,就得将不需要的参数也传个null进去,比方说一个对象有100个属性,但是我只需要里面的2个属性,那我得new对象时传98个null进去,这两种情况下就可以选择使用建造者模式。

案例一

实体类

public class Terrain {Wall w;Fort f;Mine m;
}class Wall {int x, y, w, h;public Wall(int x, int y, int w, int h) {this.x = x;this.y = y;this.w = w;this.h = h;}
}class Fort {int x, y, w, h;public Fort(int x, int y, int w, int h) {this.x = x;this.y = y;this.w = w;this.h = h;}}class Mine {int x, y, w, h;public Mine(int x, int y, int w, int h) {this.x = x;this.y = y;this.w = w;this.h = h;}
}

接口

每个方法的返回值都是TerrainBuilder对象,就可以实现链式编程。

public interface TerrainBuilder {TerrainBuilder buildWall();TerrainBuilder buildFort();TerrainBuilder buildMine();Terrain build();
}

实现

public class ComplexTerrainBuilder implements TerrainBuilder {Terrain terrain = new Terrain();@Overridepublic TerrainBuilder buildWall() {terrain.w = new Wall(10, 10, 50, 50);return this;}@Overridepublic TerrainBuilder buildFort() {terrain.f = new Fort(10, 10, 50, 50);return this;}@Overridepublic TerrainBuilder buildMine() {terrain.m = new Mine(10, 10, 50, 50);return this;}@Overridepublic Terrain build() {return terrain;}
}

测试

public class Main {public static void main(String[] args) {TerrainBuilder builder = new ComplexTerrainBuilder();Terrain t = builder.buildFort().buildMine().buildWall().build();}
}

案例二

Person类,假设有100个参数

public class Person {int id;String name;int age;double weight;int score;Location loc;private Person() {}public static class PersonBuilder {Person p = new Person();public PersonBuilder basicInfo(int id, String name, int age) {p.id = id;p.name = name;p.age = age;return this;}public PersonBuilder weight(double weight) {p.weight = weight;return this;}public PersonBuilder score(int score) {p.score = score;return this;}public PersonBuilder loc(String street, String roomNo) {p.loc = new Location(street, roomNo);return this;}public Person build() {return p;}}
}class Location {String street;String roomNo;public Location(String street, String roomNo) {this.street = street;this.roomNo = roomNo;}
}

测试

public class Main {public static void main(String[] args) {Person p = new Person.PersonBuilder().basicInfo(1, "zhangsan", 18)//.score(20).weight(200)//.loc("bj", "23").build();}
}

Builder建造者设计模式相关推荐

  1. design pattern Builder 建造者设计模式

    其实设计模式可以学的很有意思的,不需要非得如此硬枯燥地去啃FOG的大部头,当然这些骨头啃啃也健康. 本文利用建造者模式设计一个有趣的场景,一个利用这个模式去学功夫的过程,呵呵. 首先设计一个基类,学功 ...

  2. Builder (建造者) — 【面向对象设计模式学习】

    Builder (建造者) - [面向对象设计模式学习] By CityWalker 2010年3月19日 Intent Separate the construction of a complex ...

  3. Golang 建造者设计模式(三)

    上一篇:https://blog.csdn.net/weixin_40165163/article/details/90648149 单例设计模式 建造者设计模式 造者模式(Builder Patte ...

  4. Java设计模式 -- 建造者设计模式

    建造者设计模式 概念 将一个复杂的对象的构造与它的表示分离,使得同样的构造过程可以创建不同的表示. 在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象. 用户只需要给出指定复杂对象的类型 ...

  5. C++设计模式-Builder建造者模式

    作用: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式和AbstractFactory模式在功能上很相似,因为都是用来创建大的复杂的对象,它们的区别是: ...

  6. 设计模式学习(十一):Builder建造者模式

    一.什么是Builder模式 大都市中林立着许多高楼大厦,这些高楼大厦都是具有建筑结构的大型建筑.通常,建造和构建这种具有建筑结构的大型物体在英文中称为Build. 在建造大楼时,需要先打牢地基,搭建 ...

  7. 【C++设计模式】Builder 建造者模式详解

    文章目录 建造者模式概述 建造者模式结构与实现 模式结构 模式实现 建造者模式的应用实例:模拟游戏角色的创建 建造者模式的适用场景 建造者模式的优缺点 建造者模式概述 建造者模式是较为复杂的创建型模式 ...

  8. 从砸完电脑去买新电脑这事扯一下建造者设计模式

    前言 (微剧场): 小架昨天跟女朋友吵架了(什么?这个弟弟竟然有女朋友?先别急,别急,就假装一下他有,毕竟我们故事还要讲下去对不?),咳-于是呢,小架今天拿着女朋友昨天给的钱打算去电脑城去配一台新的电 ...

  9. 【建造者设计模式详解】Java/JS/Go/Python/TS不同语言实现

    简介 建造者模式(Builder Pattern),也叫生成器模式,属于创建型模式.它使用多个简单的对象一步一步构建成一个复杂的对象.它允许你使用相同的创建代码生成不同类型和形式的对象. 当你希望使用 ...

最新文章

  1. wince系统改安卓系统_什么是实时操作系统(RTOS)
  2. java list取值_Java集合详解
  3. U3D的有限状态机系统
  4. 诺微联盟催生智能手机的三足鼎立
  5. [转]Sublime Text 2 C++编译运行简单配置
  6. c语言屏蔽按键,VC实现让关闭按钮成灰色不可用的方法
  7. android基础入门布局讲解(2)
  8. python中dict对象和字符串string对象互相转换
  9. Chrome 谷歌浏览器中文默认小于12px设置无效解决办法
  10. NORADLE - 基于oracle数据库的最简捷信息系统架构
  11. VS2003远程调试
  12. 如何创建一个基本的魔兽全图外挂 HowTo create a basic Maphack by Chaotic
  13. 抽样中误差的相关概念和种类
  14. SVN checkout 之后图标(绿色勾之类的)没有显示出来的问题
  15. 《魔兽争霸3》战网命令详解
  16. Vue style里面使用scoped属性并@import引入外部css, 作用域是全局的解决方案
  17. 【云原生 | Kubernetes 系列】--Gitops持续交付 Tekton Pipeline使用进阶(pvc和Results)
  18. mysql外键约束的作用_MySql外键约束作用
  19. 压缩感知测量矩阵之有限等距性质(Restricted Isometry Property, RIP)
  20. STM32CubeMx入门教程

热门文章

  1. 【算法基础】数据结构导论第五章-图.pptx
  2. 【机器学习基础】关于Scikit-Learn,你不一定知道的10件事
  3. 【入门基础】conda+jupyter玩转数据科学环境搭建
  4. 推荐算法炼丹笔记:阿里序列化推荐算法ComiRec
  5. 网易实战分享|实时音视频会议场景下QoS策略
  6. 13个大奖任你拿,网易MINI开发挑战赛强势来袭!
  7. 互联网1分钟 |1127
  8. Java vs Kotlin,Android开发人员应该选择哪种语言?
  9. 浏览器厂商开始默认支持WebAssembly格式
  10. Qt 实现桌面右下角消息弹窗提示