设计模式之建造者模式

简介: 设计模式之建造者模式

     首先是他的重要性,在effective-java中第二条就建议使用建造者模式,在23种设计模式中,他是一个生产模式,定位十分准确,使用这种模式可以让我们更好的创建一个类,适合什么时候使用,构造方法参数多余四个以及将来可能扩展到四个的时候,生产的时候务必考虑到将来的扩展性,如果初期使用了工厂模式来生产,后期参数增加需要修改,会让工厂模式变得十分尴尬。

     其原理是充分利用了java得特性以及语法,建造者模式核心就是this关键字以及内部类,接下来就由一个例子来说明吧,如果我们要创建一个People类,有name,age,weight,height或者更多得属性,如果直接用四个参数得构造方法是非常头疼得,我们需要知道这四个构造参数得顺序以及意义,在开发得时候有代码提示或许好一点,但是维护得时候需要阅读大量代码就非常致命了,回到Buider模式,和普通类得区别是,我们需要一个public static final修饰得Buider内部类,public是为了People类能访问到,静态是为了不用声明内部类,final修饰是为了保证不可变,(老实说,作者此处也没具体注意到final得作用,只明白static final是一种常见甚至是必须得修饰),Buider类也需要和People一样得私有属性,给每一个属性添加一个类似set方法得方法,命名直接是属性名即可,参数名统一使用val,返回类型是Builder,我们直接返回this即可最后需要一个返回类型是People,参数是Builder无参构造方法,return new People(this),此处this就是这个内部类,细心得读者可能发现了People类并没有这个方法,于是我们需要给People添加一个参数是Builder的构造方法,直接将Build的属性赋值给People类,此时完成了建造者模式,达到链式编程的目的。

内部类方法参数使用val是为了和其他区分,是一种良好的编程习惯,final修饰内部类或许是保证了每个赋值方法返回的this是同一个this吧

      完整代码如下:这只是一个示例,在具体使用中可灵活变换,比如在外部类使用带参构造先赋值两个参数

package com.yizhi.practice.design;
/**
 * @Author: Zing
 * @Date: 2022/09/13/18:01
 * @Description:
 */
public class MyBuilder {
    public static void main(String[] args) {
        People people = new People.Builder()
                .age(10)
                .height(180)
                .weight(800)
                .name("张三").build();
    }
}
class People{
    private Integer age;
    private Integer weight;
    private Integer height;
    private String name;
    //内部类
    public static final class Builder{
        private Integer age;
        private Integer weight;
        private Integer height;
        private String name;
        //赋值方法
        public Builder age(Integer val){
            age = val;
            return this;
        }
        public Builder weight(Integer val){
            weight = val;
            return this;
        }
        public Builder height(Integer val){
            height = val;
            return this;
        }
        public Builder name(String val){
            name = val;
            return this;
        }
        //使内部类和外部类高内聚
        public People build(){
            return new People(this);
        }
    }
    //通过内部类为外部内赋值
    public People(Builder builder){
        age = builder.age;
        name = builder.name;
        weight = builder.weight;
        height = builder.height;
    }
}
相关文章
|
1月前
|
设计模式 Java
【设计模式系列笔记】建造者模式
建造者模式是一种创建型设计模式,用于将复杂对象的构建与其表示分离,使构建过程可定制。关键元素包括产品类(定义要构建的对象)、建造者接口(定义构建方法)、具体建造者类(实现构建过程)和指导者类(负责构建过程)。通过建造者模式,客户端可以灵活地创建具有不同表示的复杂对象,提高代码的可读性和可维护性,尤其适用于构建过程复杂且包含多个可选部分的情况。
112 1
|
1月前
|
设计模式 安全 Java
构建未来应用:Java设计模式 - 建造者模式(Builder)在现代编程中的应用
【4月更文挑战第7天】建造者模式是提升代码质量的关键,尤其在复杂环境中。它分步骤构建对象,将构建与表示分离,适用于UI构建、数据模型组装、配置文件解析和网络请求构造等场景。最佳实践包括明确构建步骤、提供默认值、支持链式调用和确保线程安全。然而,过多步骤、不一致状态和性能问题是使用时需注意的问题。掌握建造者模式对于现代编程至关重要。
|
1月前
|
设计模式 Java 机器人
Java设计模式-建造者模式
建造者(Builder)模式指将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。它是把对象的构建和表述分离。
62 0
Java设计模式-建造者模式
|
4天前
|
设计模式 算法
建造者模式-大话设计模式
建造者模式-大话设计模式
7 1
|
2天前
|
设计模式
设计模式-05建造者模式(Builder Pattern)
设计模式-05建造者模式(Builder Pattern)
|
3天前
|
设计模式 Java
Java设计模式:建造者模式之经典与流式的三种实现(四)
Java设计模式:建造者模式之经典与流式的三种实现(四)
|
4天前
|
设计模式 Java
Java设计模式之建造者模式详解
Java设计模式之建造者模式详解
|
1月前
|
设计模式 uml
大话设计模式(3)——造物者一般的建造者模式
大话设计模式(3)——造物者一般的建造者模式
23 1
大话设计模式(3)——造物者一般的建造者模式
|
9天前
|
设计模式
创建型设计模式之建造者模式
创建型设计模式之建造者模式
|
12天前
|
设计模式 算法 Java
【设计模式】建造者模式
【6月更文挑战第16天】建造者模式是创建型设计模式,用于分离对象构造的步骤和其表示,允许构造多种表示。适用于构建过程复杂且部分可变的情况。关键角色包括产品、抽象建造者、具体建造者和导演。例如,汉堡套餐的组合。优点是灵活性高、隐藏构建细节,缺点是可能增加代码冗余。与工厂模式对比,更关注构建顺序。示例中展示了Go语言的建造者模式实现,用于创建`ResourcePoolConfig`,通过Builder进行参数校验和构建。
12 0