构造者模式属于对象的创建模式。可以将一个产品的内部属性与产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部属性的产品对象。

常规情况下,我们多是要new关键字或者工厂模式来创建对象,但是有些对象却较复杂,如一些旅游套票可以分为:成年人、老年人、有座儿童、无座儿童、免费、军人及其家属等类型的票,他们有不同的规定和优惠。如果使用new关键字或者工厂模式来创建对象,参数太多,对象构建太费力。

为了处理这个问题,Builder模式出现,Builder模式是一种分布式构建对象的模式。

Demo1: 分步构建套票

public class TickerHelper {public void buildAdult(String info) {System.out.println("成年人票:" + info);}public void buildChildrenForSeat(String info) {System.out.println("有座儿童票:" + info);}public void buildChildrenNoSeat(String info) {System.out.println("无座儿童票:" + info);}public void buildElderly(String info) {System.out.println("老年人票:" + info);}public void buildSoldier(String info) {System.out.println("军人极其家属票:" + info);}/*** 内部类:构造器*/public static class Builder {public static Object builder(TickerHelper helper) {System.out.println("通过TickerHelper构建套票信息");return null;}}public static void main(String[] args) {TickerHelper helper = new TickerHelper();helper.buildAdult("成人票");helper.buildAdult("有座儿童票");helper.buildAdult("无座儿童票");helper.buildAdult("老年人票");helper.buildAdult("军人极其家属票");Object ticket = Builder.builder(helper);System.out.println(ticket);}
}

测试结果:

明显,上边构建过程较为简便。通过配置类装载票据类型,然后通过一个构造器来完成套票对象的构建。


Demo2: 属性装填,构造对象

public class CustomConfig {private int id;private String name;private int age;private String address;private int sex;private String school;private String home;private String city;private String country;public CustomConfig(CustomBuilder builder) {this.id = builder.id;this.name = builder.name;this.age = builder.age;this.address = builder.address;this.sex = builder.sex;this.school = builder.school;this.home = builder.home;this.city = builder.city;this.country = builder.country;}public int getId() {return id;}public String getName() {return name;}public int getAge() {return age;}public String getAddress() {return address;}public int getSex() {return sex;}public String getSchool() {return school;}public String getHome() {return home;}public String getCity() {return city;}public String getCountry() {return country;}public static CustomBuilder builder() {return new CustomBuilder();}/*** 内部类:构造器*/public static class CustomBuilder {private int id = 1;private String name = "default";private int age = 1;private String address = "default";private int sex = 1;private String school = "default";private String home = "default";private String city = "default";private String country = "default";public CustomBuilder id(int id) {this.id = id;return this;}public CustomBuilder name(String name) {this.name = name;return this;}public CustomBuilder age(int age) {this.age = age;return this;}public CustomBuilder address(String address) {this.address = address;return this;}public CustomBuilder sex(int sex) {this.sex = sex;return this;}public CustomBuilder school(String school) {this.school = school;return this;}public CustomBuilder home(String home) {this.home = home;return this;}public CustomBuilder city(String city) {this.city = city;return this;}public CustomBuilder country(String country) {this.country = country;return this;}public CustomConfig build() {return new CustomConfig(this);}}
}

运行结果:

这里为了减少getter和setter方法的书写,实体对象的构建过程,同时也给各个变量装填属性,作用等同于变量的setter方法。可以清晰的看到,这样构建对象和属性设置过程较为简便。

构造者模式(Builder)相关推荐

  1. 说说设计模式~建造者模式(Builder)

    建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我们的MVC ...

  2. 大话设计模式读书笔记11----建造者模式(Builder)

    建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的建造过程可以创建不同的表示. 1.Builder是什么? 是创建一个Product对象的各个部件指定的抽象接口. 2.Con ...

  3. 一天一个设计模式之建造者模式(Builder)

    建造者模式,属于创建型模式,其目的在于将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 适用情况: • 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. ...

  4. Java 设计模式之构造者模式

    构造者模式和策略模式比较类似,都是由一个调用方和被调用方组成,只是构造者模式一般用于更复杂的情况,虽然具体的工作由被调用方实现,但是调用方确定实现的先后顺序. 1.定义Builder接口 public ...

  5. 建造者模式(Builder)——从组装电脑开始

    建造者模式(Builder)--从组装电脑开始 建造者模式概括起来就是将不同独立的组件按照一定的条件组合起来构成一个相对业务完整的对象.调用者无需知道构造的过程. 我们从组装电脑开始 让我们从买组装电 ...

  6. Android设计模式之建造者模式builder

    今天小编来说一下Android中的一种设计模式--建造者模式Builder 绪论: 那么对于Android初级来说,Builder设计模式可能在我们开发中用过的很少,但是我们可能见过,我们经常用的Al ...

  7. C++设计模式之建造者模式(builder)(创建型)

    软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径.设计模式中运用了面向对象编程语言的重要特性:封装.继承.多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累. ...

  8. java 抽象类 模板_Java抽象类的构造模板模式用法示例

    搜索热词 本文实例讲述了Java抽象类的构造模板模式用法.分享给大家供大家参考,具体如下: 一 点睛 模板模式的一些简单规则. 抽象父类可以只定义需要使用的某些方法,而不能实现的部分抽象成抽象方法,留 ...

  9. 超超超 简单构造者模式

    需求: 电脑类用于主键构造者模式 使⽤构建者设计模式来⽣产computer(演示用了String 其实都是对象·) 主要步骤: 1.将需要构建的⽬标类分成多个部件(电脑可以分为主机.显示器.键盘.⾳箱 ...

  10. 建造模式Builder

    建造模式Builder /*** 抽象建造者*/ public abstract class Builder {public abstract void buildPart1();public abs ...

最新文章

  1. Swift:UIKit中Demo(一)
  2. 第三代DNA测序及其相关生物信息学技术发展概况
  3. 开关磁阻电机调速控制的仿真研究
  4. centos7下nginx配置
  5. 全球计算机与工程学科排名:MIT夺冠 中国23所高校上榜
  6. Marketing Cloud API消费entity unsupported format错误消息的处理
  7. linux 脚本 变量为空,Shell判断一个变量是否为空
  8. linux怎么安装Nginx
  9. oracle财务管理系统有什么用,CSS_Oracle财务管理系统:会计业务周期,下面是使用Oracle财务管理系统 - phpStudy...
  10. 程序员加油站 -- 不是人人都懂的学习要点
  11. 实现Unity2D游戏中跳跃功能和相关问题解决
  12. LVGL 7.8模拟时钟
  13. Windows下mysql数据库的下载、安装、使用(详细)(有后续)
  14. 浙江奥米流体携卫生级泵、阀门及活接,管道配件等产品相约发酵展
  15. 百度音乐电台升级紧跟豆瓣FM:强调坚持免费
  16. 工作电子邮件怎么注册?
  17. ING创建有利于华尔街的区块链解决方案
  18. 为什么学编程的人大多数都去了深圳和北京?
  19. 计算机主板 原理,计算机主板的工作原理(二)
  20. 大学物理质点动力学思维导图_高中物理力学思维导图 高中物理知识点总结大全...

热门文章

  1. POI合并单元格时CellRangeAddress类提示过时之解决
  2. LinkedList类源码阅读
  3. CyclicBarrier源码解读
  4. day08-linux权限(chmod chown umask chattr)
  5. centos下nginx bind() to 0.0.0.0:8090 failed
  6. Boost 连接库的命名含义
  7. RHEL Linux与CentOS Linux的关系
  8. 第九大陆服务器未找到文件,我的世界1.7.x第九大陆生存服务器
  9. 算法:特殊二维数组查询key值是否存在
  10. Pytorch:Tensor(张量)的使用