文章目录
一、建造者模式定义
类型: 创建型模式
介绍: 使用Builder类将多个简单的对象一步一步构建成一个复杂的对象。
目的: 分离复杂对象构建过程。
链式调用: 建造者模式往往都会搭配链式调用。
二、例子
2.1 自定义例子
public class Pizza {
private String crust;
private String sauce;
private String topping;
public Pizza(PizzaBuilder builder) {
this.crust = builder.crust;
this.sauce = builder.sauce;
this.topping = builder.topping;
}
public static class PizzaBuilder {
private String crust;
private String sauce;
private String topping;
public PizzaBuilder setCrust(String crust) {
this.crust = crust;
return this;
}
public PizzaBuilder setSauce(String sauce) {
this.sauce = sauce;
return this;
}
public PizzaBuilder setTopping(String topping) {
this.topping = topping;
return this;
}
public Pizza build() {
return new Pizza(this);
}
}
}
//使用建造者模式创建对象
Pizza pizza = new Pizza.PizzaBuilder()
.setCrust("thin")
.setSauce("tomato")
.setTopping("cheese")
.build();
2.2 JDK源码——DateTimeFormatterBuilder
public final class DateTimeFormatterBuilder {
public DateTimeFormatterBuilder parseCaseSensitive() {
appendInternal(SettingsParser.SENSITIVE);
return this;
}
public DateTimeFormatterBuilder parseCaseInsensitive() {
appendInternal(SettingsParser.INSENSITIVE);
return this;
}
public DateTimeFormatterBuilder parseStrict() {
appendInternal(SettingsParser.STRICT);
return this;
}
private DateTimeFormatter toFormatter(Locale locale, ResolverStyle resolverStyle, Chronology chrono) {
Objects.requireNonNull(locale, "locale");
while (active.parent != null) {
optionalEnd();
}
CompositePrinterParser pp = new CompositePrinterParser(printerParsers, false);
return new DateTimeFormatter(pp, locale, DecimalStyle.STANDARD, resolverStyle, null, chrono, null);
}
}
2.3 Spring源码——BeanDefinitionBuilder
public final class BeanDefinitionBuilder {
private final AbstractBeanDefinition beanDefinition;
//构造器BeanDefinitionBuilder创建beanDefinition对象
private BeanDefinitionBuilder(AbstractBeanDefinition beanDefinition) {
this.beanDefinition = beanDefinition;
}
//组装beanDefinition的parentName
public BeanDefinitionBuilder setParentName(String parentName) {
this.beanDefinition.setParentName(parentName);
return this;
}
//组装beanDefinition的factoryMethod
public BeanDefinitionBuilder setFactoryMethod(String factoryMethod) {
this.beanDefinition.setFactoryMethodName(factoryMethod);
return this;
}
//组装beanDefinition的factoryMethod和factoryBean
public BeanDefinitionBuilder setFactoryMethodOnBean(String factoryMethod, String factoryBean) {
this.beanDefinition.setFactoryMethodName(factoryMethod);
this.beanDefinition.setFactoryBeanName(factoryBean);
return this;
}
//组装beanDefinition的ConstructorArgumentValues
public BeanDefinitionBuilder addConstructorArgValue(@Nullable Object value) {
this.beanDefinition.getConstructorArgumentValues().addIndexedArgumentValue(this.constructorArgIndex++, value);
return this;
}
//获取AbstractBeanDefinition 对象
public AbstractBeanDefinition getBeanDefinition() {
this.beanDefinition.validate();
return this.beanDefinition;
}
}
三、其他设计模式
创建型模式
结构型模式
行为型模式
- 1、设计模式——访问者模式(Visitor Pattern)+ Spring相关源码
- 2、设计模式——中介者模式(Mediator Pattern)+ JDK相关源码
- 3、设计模式——策略模式(Strategy Pattern)+ Spring相关源码
- 4、设计模式——状态模式(State Pattern)
- 5、设计模式——命令模式(Command Pattern)+ Spring相关源码
- 6、设计模式——观察者模式(Observer Pattern)+ Spring相关源码
- 7、设计模式——备忘录模式(Memento Pattern)
- 8、设计模式——模板方法模式(Template Pattern)+ Spring相关源码
- 9、设计模式——迭代器模式(Iterator Pattern)+ Spring相关源码
- 10、设计模式——责任链模式(Chain of Responsibility Pattern)+ Spring相关源码
- 11、设计模式——解释器模式(Interpreter Pattern)+ Spring相关源码