建造者(Builder)模式

本文通过具体实例介绍了Builder模式的实现方式及应用。通过定义一个抽象产品类,并创建不同的具体产品类来展示如何使用Builder模式来组装产品。同时,还介绍了Builder接口、具体建造者类以及导演类的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果说工厂模式是在创建对象的话,那么Builder模式就是一个“精工细作”的过程。
Builder模式用于把产品创建的每个步骤封装起来,对客户端关闭。

首先,我们制作一个抽象的产品,假设有2个部件:

package dp.builder.general;

public interface Product {
void setPart1(String part1);
void setPart2(String part2);
}


然后是实际的产品:

public class Product1 implements Product {

private String part1;
private String part2;

public Product1() {
part1 = "";
part2 = "";
}

public void setPart1(String part1) {
this.part1 = part1;
}

public void setPart2(String part2) {
this.part2 = part2;
}

public String toString() {
return "Product1: " + part1 + ", " + part2;
}
}



package dp.builder.general;

public class Product2 implements Product {

private String part1;
private String part2;

public Product2() {
part1 = "";
part2 = "";
}

public void setPart1(String part1) {
this.part1 = part1;
}

public void setPart2(String part2) {
this.part2 = part2;
}

public String toString() {
return "Product2: " + part1 + ", " + part2;
}
}


接着,我们创建Builder接口,它负责装配产品部件,显示产品结果:

package dp.builder.general;

abstract public class Builder {

public abstract void buildPart1();

public abstract void buildPart2();

public abstract String retrieveResult();
}


实际的建造者:

package dp.builder.general;

public class ConcreteBuilder1 extends Builder {

private Product1 product = new Product1();

public void buildPart1() {
product.setPart1("ConcreteBuilder1->part1");
}

public void buildPart2() {
product.setPart2("ConcreteBuilder1->part2");
}

public String retrieveResult() {
return product.toString();
}
}



package dp.builder.general;

public class ConcreteBuilder2 extends Builder {

private Product2 product = new Product2();

public void buildPart1() {
product.setPart1("ConcreteBuilder2->part1");
}

public void buildPart2() {
product.setPart2("ConcreteBuilder2->part2");
}

public String retrieveResult() {
return product.toString();
}
}


然后,我们设置一个[b]导演[/b],它用来组织实际的建造者:

package dp.builder.general;

public class Director {

private Builder builder;

public Director(Builder builder) {
this.builder = builder;
}

public void construct() {
builder.buildPart1();

builder.buildPart2();

System.out.println(builder.retrieveResult());
}
}


最后,客户端和导演以及建造者打交道,对于实际产品关闭:

package dp.builder.general;

public class Client {

public static void main(String[] args) {
Director director = null;

System.out.println("****** Built By Concrete Builder 1 ******");
Builder builder1 = new ConcreteBuilder1();
director = new Director(builder1);
director.construct();

System.out.println("****** Built By Concrete Builder 2 ******");
Builder builder2 = new ConcreteBuilder2();
director = new Director(builder2);
director.construct();

}

}


运行结果:
****** Built By Concrete Builder 1 ******
Product1: ConcreteBuilder1->part1, ConcreteBuilder1->part2
****** Built By Concrete Builder 2 ******
Product2: ConcreteBuilder2->part1, ConcreteBuilder2->part2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值