01-|01- 构建者模式(Builder Pattern)

设计模式 构建者模式 概述: 当创建复杂对象的时候,可以使用构建者模式,把创建复杂对象的过程分离出来,并且保持对象内不同组合的灵活性。
【01-|01- 构建者模式(Builder Pattern)】角色和类图:
01-|01- 构建者模式(Builder Pattern)
文章图片
builder.png 产品(Product): 需要创建的复杂对象
构建者接口(Builder):构建者的接口抽象,把创建复杂对象的过程进行分步操作,支持流式编程
具体构建者(ConcreteBuilder):构建者的具体实现,通过build() 返回创建的产品。
指导者(Director): 使用构建器,按照步骤构建,最终获得需要的产品。
详细描述:
当某个产品对象,包含多种组合,例如套餐可以选择加可乐、蛋挞、薯条、汉堡、鸡翅等等,创建出符合需要的套餐,那创建某种套产的时候,需要一个参数完备的构造器。例如:

public Class Product { public Product(String name, Chip chip, Cola cola, Hamberger hamberger, Tart tart, Pie pie, Chicken chicken) { .... } }

要记住这么长的产生顺序是很麻烦的,而且为了方便,可以重载出各种各样的构造器。
构建者模式可以解决这个问题,使得创建这种复杂的对象更轻松和优雅。
public Class Product { private Chip chip; private Cola cola; Product(Cola cola, Chip, chip) { this.chip = chip; this.cola = cola; } @Override public String toString() { return "Product: " + chip + "," + cola ; } }public Interface Builder { Builder withChip(Chip chip); Builder withCola(Cola cola); Product build(); }public Class KFCBuilder implements Builder { private Chip chip; private Cola cola; public KFCBuilder() { }Builder withChip(Chip chip) { this.chip = chip; } Builder withCola(Cola cola) { this.cola = cola; } Product toBuild() { return new product(chip, cola); } }public Class Director { public static void main(String) { Builder builder = new KFCBuilder(); Product product = builder.withChip(new Chip()).withCola(new Cola()).build(); System.out.println(product); } }

在实际使用中,有一些变化,
  1. 构建器接口不是必须的,虽然会依赖具体实现,有的产品可能始终只需要一个具体构建器。
  2. 构建器有时候会是Product的public的静态内部类,这样builder的方法就可以访问到Product的域。
真实场景:
  1. StringBuilder
  2. rabbitmq-java-client
    ?

    推荐阅读