设计模式之Builder模式

定义

The intent of the Builder design pattern is to separate the construction of a complex object from its representation. By doing so the same construction process can create different representations.
将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示

生成器模式是一种创建型设计模式, 使你能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象。

设计模式之Builder模式_第1张图片

问题

例如,我们要创建一个房屋 House对象。建造一栋简单的房屋,我们知道门、窗和屋顶是必须的,但是如果想要更豪华的房子,比如建造一个带泳池的,带后院的等等,又该怎么办呢?

最简单的方法是扩展 House 基类,然后创建一系列涵盖所有组合的子类。最终将面临相当多的子类。任何新增的参数(例如多个烟囱)都会让整个层次结构更加复杂。

第二种是在房屋的基类创建一个包含所有可能参数的超级构造函数,这种方法虽然可以避免子类,但是,通常情况下, 绝大部分的参数都没有使用, 这使得对于构造函数的调用十分不简洁。

生成器模式

设计模式之Builder模式_第2张图片

如何实现

  1. 在 House 中创建一个静态内部类 Builder,然后将Hosue中的参数都复制到 Builder类中。
  2. 在House 中创建一个private的构造函数,参数为Builder类型。
  3. 在Builder中创建一个public的构造函数,参数为House 中必填的那些参数,door(门) 和window(窗)。
  4. 在Builder中创建设置函数,对House 中那些可选参数进行赋值,返回值为Builder类型的实例。
  5. 在Builder中创建一个build()方法,在其中构建House的实例并返回。
public class House {
    private final String door;//必须
    private final String window;//必须
    private final String roof;//可选
    private final String pool;//可选
    private final String backyard;//可选

    private House(Builder builder){
        this.door=builder.door;
        this.window=builder.window;
        this.roof=builder.roof;
        this.pool=builder.pool;
        this.backyard=builder.backyard;
    }
    public static class Builder{
        private String door;//必须
        private String window;//必须
        private String roof;//可选
        private String pool;//可选
        private String backyard;//可选

        public Builder(String door,String window){
            this.door=door;
            this.window=window;
        }

        public Builder setRoof(int roof) {
            this.roof = roof;
            return this;
        }
        public Builder setPool(String pool) {
            this.pool = pool;
            return this;
        }
        public Builder setBackyard(String backyard) {
            this.backyard = backyard;
            return this;
        }        
        public House build(){
            return new House(this);
        }
    }
  //省略getter方法
}

如何使用

House house=new House.Builder("木质门","铝合金门窗")
                .setRoof("玻璃屋顶")
                .setPool("露天泳池")
                .setBackyard("100平后院")
                .build();

总结

builder设计模式

Builder设计模式就像是搭积木一样,它将复杂对象的构建过程拆解成多个简单的步骤,并提供一个建造者(Builder)来逐步构建对象。这样,你可以根据需要选择性地执行每个步骤,最终得到不同的对象表示形式。就像通过不同的积木组合,可以构建出不同的形状和结构一样。这种方式使得构建过程更加灵活、可扩展,同时保持了代码的可读性和可维护性。

什么情况下使用

当一个类的构造函数参数个数超过4个,而且这些参数有些是可选的参数,考虑使用构造者模式。

优点

1、可以分步创建对象。
2、生成不同形式的产品时,可以复用相同的构造代码。
3、单一职责原则。 你可以将复杂构造代码从产品的业务逻辑中分离出来。

单一职责原则(Single Responsibility Principle,简称SRP)是面向对象设计原则中的一条基本原则,它指导着我们在设计类时应该保持职责的单一性。

根据单一职责原则,一个类应该只有一个引起它变化的原因。换句话说,一个类应该只有一个主要的责任或关注点。这样设计的类具有高内聚性(Cohesion),即类的各个成员函数和属性紧密相关,共同完成某个明确的功能。

你可能感兴趣的:(设计模式,建造者模式,java)