什么是建造者模式
Builder Pattern 是一种创建型设计模式,旨在通过将复杂对象的构建过程分解成多个步骤来使得同样的构建过程可以创建不同的表示。
简单理解下,就是相同的基础元件+不同的组装方式,即构建与表示分离,以达到用同样的构造创建不同的表示,这里的“表示”指的是对象的最终状态或者形式。
为什么要使用建造者模式
建造者模式的核心目的是通过使用多个简单对象一步步构建出一个的复杂对象,通过操作控制台,一步步地组装炒股坦克。 ——《重学Java设计模式》
而我们在实现 Builder Pattern 时,一般会定义一个 Builder 接口或者一个静态内部类,用来定义对象构建的各个步骤(比如设置不同的属性setA()、setB()、setC()……),最后通过一个 build 方法来返回构建好的对象实例。
特点和优势
相比传统的构建方式,建造者模式有它自身的一些特点和优势:
-
分步构建:将复杂对象的构建过程分解成多个步骤,每个步骤可以独立进行
-
灵活性:可以根据需要定制对象的构建过程,不同的 Builder 实现可以创建不同的对象表示
-
可读性:通过链式调用或者清晰的方法命名,提高了代码的可读性和可维护性
-
避免重叠构造方法:避免了构造方法参数过多或者重叠的问题,使代码更加清晰
其实说白了可能就是一个目的。。emmm我再也不需要创建n多个构造方法了!!!!
传统创建方法
传统创建方法指的是直接使用类的构造方法或者静态工厂方法创建对象
优势和劣势
emmm简单直接,而且很容易理解和使用。
But、、当参数多起来,就没那么简单了,想象一下一个有15个参数的构造函数emmm...
而且如果有些场景只需要传2个参数就够了,我也要穿15个参数嘛,或者我再创建个只有这两个参数的构造函数?如果有的场景要3个呢?再创建个只有这两个参数的构造函数?
因此我们不难看出,传统的类的构造方法或者静态工厂方法创建对象适合于对象创建简单、参数少、结构清晰的情况,那么构造器模式适用于什么场景,也就不言而喻了~~~~
案例对比
当参数较少时
传统方式:
构造器方式:
调用方式:
public static void main(String[] args) {
Product product = new Product.Builder()
.name("ProductA")
.code(11111L)
.build();
}
当参数较多时
传统方式:
一般这俩构造方法是必须的,当然如果场景比较多,又不能每次都传10来个参数,我们就需要多加几个构造函数,像下面这样:
emmmm = =,好像不是很优雅哈哈
构造器方式:
基本形式不变,只是多了一些set方法,并且无论想设置哪几个属性都可以满足~~
调用方式:
public static void main(String[] args) {
Product product = new Product.Builder()
.name("ProductA")
.code(111111L)
.setKey1("value1")
.setKey2("value2")
.build();
}
总结
一句话总结:传统创建方法简单直接,而且很容易理解和使用,适用于参数较少+场景简单的情况;构造者模式则适用于参数较多+场景较为复杂的情况,完结~撒花~~~~