java构建模式_JAVA设计模式之构建器模式(builder)

构建器模式:

分离复杂对象的构建和表示

同样的构建过程可以创建不同的表示

无需记忆,自然使用

同模板方法模式非常相似,只是模板方法是强调方法执

场景:假如有一个类非常复杂,它有100个属性,如果使用java提供的构造方法构建它需要给它传递100个参数,这么构建岂不是很费劲,而且在实际的业务场景中并不需要对该

对象的所有属性都赋值,那么使用构建器模式我们可以先构建一部分,再构建一部分,最后构建其他的,这样的化就可以根据实际业务场景灵活的控制对象的构建过程。

代码实现:

package com.srr.dp.builder;

/**

* 构建器接口

*/

public interface Builder {

Builder build0();

Builder build1();

Builder build2();

ComplexClass build();

}

package com.srr.dp.builder;

/**

* 复杂对象

*/

public class ComplexClass {

protected class1 c1;

protected class2 c2;

protected class3 c3;

}

class class1 {

private int a;

class1(int a){

this.a = a;

}

}

class class2 {

private String name;

class2(String name){

this.name = name;

}

}

class class3 {

private long b;

class3(long b){

this.b = b;

}

}

package com.srr.dp.builder;

/**

* 简单构建器

*/

public class SimpleBuilder implements Builder {

ComplexClass cc = new ComplexClass();

@Override

public Builder build0() {

class1 c1 = new class1(1);

cc.c1 = c1;

return this;

}

@Override

public Builder build1() {

class2 c2 = new class2("");

cc.c2 = c2;

return this;

}

@Override

public Builder build2() {

class3 c3 = new class3(2L);

cc.c3 = c3;

return this;

}

@Override

public ComplexClass build() {

return cc;

}

}

package com.srr.dp.builder;

/**

* 测试类

*/

public class T2 {

Builder builder = new SimpleBuilder();

ComplexClass cc = builder.build0().build1().build2()

.build();

}

在我们实际的业务场景中如何使用的呢,请看代码:

packagecom.srr.dp.builder;importjava.sql.Date;/*** 实际应用场景使用构建器模式*/

public classPerson {private intage;privateString name;private intsex;privateDate birthday;private intweight;public static classPersonBuilder{

Person person= newPerson();public PersonBuilder buildinfo(int age,String name,intsex) {

person.age=age;

person.name=name;

person.sex=sex;return this;

}public PersonBuilder buildWeight(intweight) {

person.weight=weight;return this;

}publicPersonBuilder buildBirthday(Date birthday) {

person.birthday=birthday;return this;

}publicPerson build() {returnperson;

}

}

}packagecom.srr.dp.builder;importjava.sql.Date;/*** 测试类

* 如果Person类有100个属性,而且并不是所有的属性都需要赋值,用的时候赋值,不用的时候不传值

* 如果使用java普通的构建方式,100个参数都赋值,读起来费劲,写起来累死

* 鉴于只是说明原理,并没有实际构建100个属性*/

public classT {public static voidmain(String[] args) {

Person person= new Person.PersonBuilder().buildinfo(32,"srr",0)

.buildWeight(120) //如果不想构建weight那么不调用buildWeight即可

.buildBirthday(new Date(1L)).build();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值