• 设计模式之构造者模式


    定义

    使用生成器模式封装一个产品的构造过程,并允许按步骤构造。
    将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。

    使用场景

    当一个类的构造函数参数比较多,并且参数存在非必须有可选的情况时,使用构造者模式比较灵活。
    在上述场景下采用多构造函数重载方式的话构造函数会比较多,使用不便。新建一个空对象,通过set设置属性值的方式的话,属性的设置步骤会比较琐碎,也不太方便。

    示例

    BeanDefinitionBuilder-spring

    • 将BeanDefinitionBuilder与构造的BeanDefinition关联。
    	public static BeanDefinitionBuilder genericBeanDefinition() {
    		return new BeanDefinitionBuilder(new GenericBeanDefinition());
    	}
    
    • 对属性进行各种设置
    	public BeanDefinitionBuilder setParentName(String parentName) {
    		this.beanDefinition.setParentName(parentName);
    		return this;
    	}
    	public BeanDefinitionBuilder setFactoryMethod(String factoryMethod) {
    		this.beanDefinition.setFactoryMethodName(factoryMethod);
    		return this;
    	}
    	public BeanDefinitionBuilder setFactoryMethodOnBean(String factoryMethod, String factoryBean) {
    		this.beanDefinition.setFactoryMethodName(factoryMethod);
    		this.beanDefinition.setFactoryBeanName(factoryBean);
    		return this;
    	}
    	public BeanDefinitionBuilder addConstructorArgValue(@Nullable Object value) {
    		this.beanDefinition.getConstructorArgumentValues().addIndexedArgumentValue(
    				this.constructorArgIndex++, value);
    		return this;
    	}
    
    • 获取构造好的对象
    public AbstractBeanDefinition getRawBeanDefinition() {
    		return this.beanDefinition;
    	}
    

    StringBuilder也是建造者模式的一个示例。


    参考链接:https://zhuanlan.zhihu.com/p/58093669

  • 相关阅读:
    30. 串联所有单词的子串
    206. 反转链表及扩展
    leetcode合并专题(陆续补充)
    剑指 Offer 25. 合并两个排序的链表及扩展
    1371. 每个元音包含偶数次的最长子字符串
    1334. 阈值距离内邻居最少的城市
    1310. 子数组异或查询
    1297. 子串的最大出现次数
    VS2012安装后 VS2010出现fatal error LNK1123: failure during conversion to COFF
    BFS/DFS 模板 代码
  • 原文地址:https://www.cnblogs.com/silenceshining/p/14375529.html
Copyright © 2020-2023  润新知