设计模式——建造者模式(Builder Pattern)+ Spring相关源码

文章目录

  • 一、建造者模式定义
  • 二、例子
    • 2.1 自定义例子
    • 2.2 JDK源码——DateTimeFormatterBuilder
    • 2.3 Spring源码——BeanDefinitionBuilder
  • 三、其他设计模式

一、建造者模式定义

类型: 创建型模式
介绍: 使用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、设计模式——装饰器模式(Decorator Pattern)+ Spring相关源码

行为型模式

  • 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相关源码

你可能感兴趣的:(Programming,Concepts,设计模式,建造者模式,spring,builder,pattern,builder)