builder模式

作者: oneWeekOneTopic | 来源:发表于2018-06-08 10:44 被阅读9次

解决问题

以一种更加清晰简洁的方式来解决复杂结构体的构建过程,且可以让用户更加灵活地控制对象的构建过程。相对于constructor和setter方法,它的语法更加简洁和清晰。

但它所面临的一个问题是,对于每个类都要写一个Builder,这无疑增加了写代码的难度。

应用场景

应用于复杂结构体的构建。一个很好的工具是lombok的@Builder

原理图(UML)

image

这个原理图是比较恶心的,采用接口化编程实理builder, 然后使用一个引导器完成对象的创建。一般情况下,不建议使用该方式(太复杂)

示例

我认为该原理图将builder模式变得很复杂,既然每个类都要写一个builder,那该builder我们可以将其认为是类的一部分,所以使用内部类会成为一个不错的方式

public class Student {

    private int id;
    private String name;
    private String passwd;
    private String sex;
    private String address;

    // 构造器尽量缩小范围
    private Student() {
    }

    // 构造器尽量缩小范围
    private Student(Student origin) {
        // 拷贝一份
         this.id = origin.id;
        this.name = origin.name;
        this.passwd = origin.passwd;
        this.sex = origin.sex;
        this.address = origin.address;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getPasswd() {
        return passwd;
    }

    public String getSex() {
        return sex;
    }

    public String getAddress() {
        return address;
    }

    /**
     * Student的创建完全依靠Student.Builder,使用一种方法链的方式来创建
     *
     */
    public static class Builder {

        private Student target;

        public Builder() {
            target = new Student();
        }

        public Builder address(int id) {
            target.id = id;
            return this;
        }

        public Builder name(String name) {
            target.name = name;
            return this;
        }

        public Builder password(String passwd) {
            target.passwd = passwd;
            return this;
        }

        public Builder sex(String sex) {
            target.sex = sex;
            return this;
        }

        public Builder address(String address) {
            target.address = address;
            return this;
        }

        public Student build() {
            return new Student(target);
        }
        
    }

}

Student s=new Student.Builder().name("xx").password("****").sex("男").address("北京市朝阳区").build();

image

参考

https://www.cnblogs.com/cc11001100/p/5939220.html

相关文章

  • 设计模式:Builder

    Builder模式基本介绍Builder模式的实现源码中的Builder模式记录 Builder模式基本介绍 Bu...

  • Builder模式

    个人博客http://www.milovetingting.cn Builder模式 模式介绍 Builder模式...

  • Android中的构建者(Builder)模式

    目录一、场景分析二、定义三、Builder模式变种-链式调用四、经典Builder模式五、用到Builder模式的...

  • Builder模式

    Builder模式?(好熟悉,貌似有说不上来),在这里好好总结一下。 Builder模式的介绍 Builder模式...

  • 设计模式之构建者模式

    Builder属于创建型设计模式 Builder定义: Separate the construction of ...

  • 建造者模式

    建造者模式 创建型模式 Director、Builder、Product建造模型 Builder负责构建Produ...

  • Builder模式及原型模式

    本文主要内容 Builder模式定义 Builder模式 原型模式定义 原型模式 本文介绍两种简单的设计模式,Bu...

  • 11.2设计模式-构建者模式-详解

    构建者模式 java的builder模式详解 builder模式在android中的实际运用 1.java的bui...

  • 第 7 章 Builder 模式 -- 组装复杂的实例

    Builder 模式 概念:组装具有复杂结构的实例可以称为 Builder 模式。 Show me the cod...

  • 设计模式--Builder

    标签(空格分隔): android 设计模式 builder 1 Builder设计模式概述 将复杂对象的构建与它...

网友评论

    本文标题:builder模式

    本文链接:https://www.haomeiwen.com/subject/umbosftx.html