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);
}
}
在实际使用中,有一些变化,
- 构建器接口不是必须的,虽然会依赖具体实现,有的产品可能始终只需要一个具体构建器。
- 构建器有时候会是Product的public的静态内部类,这样builder的方法就可以访问到Product的域。
- StringBuilder
- rabbitmq-java-client
?
推荐阅读
- 盖一座房
- 涉毒患者(新诗)
- “精神病患者”的角度问题
- 雅集
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- 2019-01-17-晨读7期-直子Day25
- 如果你是一名工作乐之者,996的工作又算得了什么()
- 《卓有成效的管理者》第二十二堂课(创造英雄)
- 过眼烟云自痴一一读《做洁白芳香的女人》有感一作者梦的衣裳