专栏首页java程序员思维java设计模式之构建模式,私人订制自己的创意

java设计模式之构建模式,私人订制自己的创意

构建模式解决的问题

创建对象的方法,通常的做法是通过构造方法,直接对属性赋值。或者先new一个对象,通过set方法对属性赋值,但是如果属性很多的情况下,构造方法需要注意属性赋值的顺序,如果通过set方法赋值,需要调用很多次set方法。构建模式让构建复杂对象更方便。

构建模式角色

构建模式抽象类方法类型

代码实现

public class Student { private String name; private Integer age; private String address; public Student(){} public Student(String name, Integer age, String address) { this.name = name; this.age = age; this.address = address; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; }}
public class StudentBuilder { private Student student; public StudentBuilder(){ student = new Student(); } public StudentBuilder age(Integer age){ student.setAge(age); return this; } public StudentBuilder name(String name){ student.setName(name); return this; } public StudentBuilder address(String address){ student.setAddress(address); return this; } public Student build(){ return student; }}
public class StudentCreateTest { public static void main(String[] args) { //构造方法方法创建对象和赋值 Student student = new Student("java程序员思维",20,"浦东"); System.out.println(student); //set方法创建对象和赋值 Student student1 = new Student(); student1.setName("java程序员思维"); student1.setAge(20); student1.setAddress("浦东"); System.out.println(student1); //构建模式 StudentBuilder studentBuilder = new StudentBuilder(); Student student2 = studentBuilder.name("java程序员思维"). age(20).address("浦东").build(); System.out.println(student2); }}

运行结果:

创建三种对象的方法,各有优缺点,构造方法方式创建,在调用时,需要注意对应属性的顺序,在属性很多的情况下,这是一个很麻烦的事情,优势是只有一行代码。通过默认构造方法创建对象,再通过set方法赋值属性的方法,优点是不需要关心构造方法的属性顺序,缺点是需要调用多次set方法,代码行数较多。第三种方式构建模式创建对象,结合前两种方法的各自优点,不需要关心顺序,通过链式方法,只有一行代码,缺点是需要创建对应的builder对象。

jdk中的构建模式

java.lang包中的StringBuilder,运用的就是构建模式。

@Overridepublic StringBuilder append(char c) { super.append(c); return this;}@Overridepublic StringBuilder append(int i) { super.append(i); return this;}@Overridepublic StringBuilder append(long lng) { super.append(lng); return this;}@Overridepublic StringBuilder append(float f) { super.append(f); return this;}

优缺点

优点:建造者独立,易扩展。 便于控制细节风险。

缺点:产品必须有共同点,范围有限制。 内部变化复杂,会有很多的建造类。

生活中的构建模式

盖房子,我们在生活中盖房子,有地基,墙、顶梁柱这个是大框架,框架搭好了,接下来要对房子进行装修,地板、壁纸、沙发、冰箱、电视等等也是房子的一部分。不同的部分根据自己的喜好有不同的构建方式。

组装电脑,我们买的电脑都是由主板、内存、cpu、显卡等组成,如何把这些东西组装起来给用户这就是建造者模式的作用,不同的人对电脑的配置需求不一样,打游戏的对显卡要求高,但是电脑构成部件是固定的,我们找电脑城的装机人员把电脑装起来这一过程就是建造模式.

我的启发

构建模式,让构建产品的过程和产品本身进行分离,用户可以根据自己的喜好,进行私人订制,马桶镶金、电脑镶砖也都是可以的,只要你够富有和真的喜欢。

本文分享自微信公众号 - java程序员思维(java_python_go),作者:曾建路

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java设计模式之中介者模式

    中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代...

    用户4361942
  • java设计模式之组合模式

    组合(Composite Pattern)模式的定义:有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对...

    用户4361942
  • Head first 设计模式之策略模式,来源于生活,用之于生活

    设计模式是软件设计中常见问题的通用可重用的解决方案,与语言无关。通过引入设计模式,可以更好的提高代码复用性、灵活性、扩展性。

    用户4361942
  • PHP5中的魔术方法

    php中构造方法是对象创建完成后第一个被对象自动调用的方法。在每个类中都有一个构造方法,如果没有显示地声明它,那么类中都会默认存在一个没有参数且内容为空的构造方...

    用户7657330
  • spring之配置单例的集合bean,以供多个bean进行引用

    这种情况下,是在一个bean的里面进行配置的,假设现在我们有另外一个bean,也需要使用List集合里的bean,那么应该怎么做呢?

    绝命生
  • thinkphp常用配置config

    下载解压 ThinkPHP 3.2.3,在默认的应用 Application(./Application) 中,包含一个默认的模块 Home(./Applica...

    公众号php_pachong
  • SpringBoot系列教程之Bean之指定初始化顺序的若干姿势

    上一篇博文介绍了@Order注解的常见错误理解,它并不能指定 bean 的加载顺序,那么问题来了,如果我需要指定 bean 的加载顺序,那应该怎么办呢?

    一灰灰blog
  • 聊聊sharding-jdbc的AbstractDataSourceAdapter

    本文主要研究一下sharding-jdbc的AbstractDataSourceAdapter

    codecraft
  • 聊聊sharding-jdbc的AbstractDataSourceAdapter

    本文主要研究一下sharding-jdbc的AbstractDataSourceAdapter

    codecraft
  • log4net 记录MVC监控日志

      由于MVC自身的特点,可以让我们记录每一个Controller下Action的执行时间以及View视图渲染完成的时间,本文采用log4net记录MVC每个A...

    写代码的猿

扫码关注云+社区

领取腾讯云代金券