建造者(builder)模式是创建型模式,创建了一个对外隐藏创建过程的产品,使用组合的方式,由指挥者(director)来决定建造的流程
类图
public interface builder {
void buildparta();
void buildpartb();
void buildpartc();
}
public class builderimpl implements builder {
@override
public void buildparta() {
system.out.println("建造部件a");
}
@override
public void buildpartb() {
system.out.println("建造部件b");
}
@override
public void buildpartc() {
system.out.println("建造部件c");
}
}
public class builderimpl2 implements builder {
@override
public void buildparta() {
system.out.println("建造部件aa");
}
@override
public void buildpartb() {
system.out.println("建造部件bb");
}
@override
public void buildpartc() {
system.out.println("建造部件cc");
}
}
/**
* 指挥者:指导 如何 建造
* 组合builder
* @author stone
*
*/
public class director {
private builder builder;
public director(builder builder) {
this.builder = builder;
}
/**
* 建造方法:定义了建造的流程
* 如果需要其他流程来实现,再new一个指挥者director就可
*/
public void construct() {
system.out.println("director 指挥 builder进行建造");
builder.buildparta();
builder.buildpartb();
builder.buildpartc();
}
}
/**
* 指挥者:指导 如何 建造
* 组合builder
* @author stone
*
*/
public class director2 {
private builder builder;
public director2(builder builder) {
this.builder = builder;
}
/**
* 建造方法:定义了建造的流程
* 如果需要其他流程来实现,再new一个指挥者director就可
*/
public void construct() {
system.out.println("director2 指挥 builder进行建造");
builder.buildpartb();
builder.buildpartc();
builder.buildparta();
}
}
/*
* 建造者模式:建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,
*
* 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式
*/
public class test {
public static void main(string[] args) {
builder builder = new builderimpl();
director director = new director(builder);
/*
* 同样的构建过程,不同的模块(buildparta、buildpartb、buildpartc)实现, new一个builder的实现
* 不同的构建过程,new 一个director
* 不同的构建过程,不同的模块实现, new director,new builder
*/
director.construct();
system.out.println("");
builder builder2 = new builderimpl2();
director director2 = new director(builder2);
director2.construct();
system.out.println("");
builder builder3 = new builderimpl2();
director2 director3 = new director2(builder3);
director3.construct();
}
}
打印:
director 指挥 builder进行建造
建造部件a
建造部件b
建造部件c
director 指挥 builder进行建造
建造部件aa
建造部件bb
建造部件cc
director2 指挥 builder进行建造
建造部件bb
建造部件cc
建造部件aa
在现实开发中,可能经常会省略director这个角色,直接使用builder来进行建造产品;
该产品的特点就是属性特别多,多数有默认值,通过一些基本的默认属性,就能构建出一个基本的产品;
而builder多使用链式调用,如product p = new builder().seta().setb().build();
以上就是java 实现建造者(builder)模式的代码示例的详细内容。