建造模式/Builder

建造模式/Builder

意图/适用场景:

如果一个产品由很多的配件组成,缺少了其中某一个配件,产品都不能工作。产品只有在所有配件都装配完成的情况下才能正常工作。对于这样的产品,不希望外界干预它的生产过程,在外界看来,生产者只提供完整的产品,而不提供任何的中间过程信息。这就是一个建造模式的应用场景。

建造模式的另一个方面在于,系统还提供不同的生产者,它们生产不两只的产品,但同样都不提供内部信息。

所以,在以下情况下可以使用Builder模式:

  1. 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
  2. 当构造过程必须允许被构造的对象有不同的表示时。

UML:

建造模式/Builder

参与者:

  1. 抽象建造者(Builder):
    • 为创建一个Product对象的各个部件指定抽象接口。
  2. 具体建造者(ConcreteBuilder):
    • 实现Builder的接口以构造和装配该产品的各个部件。
    • 定义并明确它所创建的表示。
    • 提供一个检索产品的接口。
  3. 向导(Director):
    • 构造一个使用Builder接口的对象。
  4. 产品(Product):
    • 表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。
    • 包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

应用实例:

参考《设计模式》书中本章“RTF(Rich Text Format)文档交换格式的阅读器”的例子。

示例代码:

[java]
// Source code from file:  Builder.java

package designPatterns.Builder;

public interface Builder {
public void buildPart1();
public void buildPart2();
}

// Source code from file:  ConcreteBuilder.java

package designPatterns.Builder;

public class ConcreteBuilder implements Builder {

public void buildPart1() {
// do something
}

public void buildPart2() {
// do something
}

public Product getProduct() {
Product p = new Product();
buildPart1();
buildPart2();
return p;
}
}

// Source code from file:  Director.java

package designPatterns.Builder;

public class Director {

public Product buildProduct() {
ConcreteBuilder builder = new ConcreteBuilder();
return builder.getProduct();
}

public static void main(String[] args) {
Director director = new Director();
director.buildProduct();
}

}

// Source code from file:  Product.java

package designPatterns.Builder;

public class Product {

}
[/java]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值