zoukankan      html  css  js  c++  java
  • 设计模式之构造者模式

    定义

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

    使用场景

    当一个类的构造函数参数比较多,并且参数存在非必须有可选的情况时,使用构造者模式比较灵活。
    在上述场景下采用多构造函数重载方式的话构造函数会比较多,使用不便。新建一个空对象,通过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

  • 相关阅读:
    BNU 51002 BQG's Complexity Analysis
    BNU OJ 51003 BQG's Confusing Sequence
    BNU OJ 51000 BQG's Random String
    BNU OJ 50999 BQG's Approaching Deadline
    BNU OJ 50998 BQG's Messy Code
    BNU OJ 50997 BQG's Programming Contest
    CodeForces 609D Gadgets for dollars and pounds
    CodeForces 609C Load Balancing
    CodeForces 609B The Best Gift
    CodeForces 609A USB Flash Drives
  • 原文地址:https://www.cnblogs.com/silenceshining/p/14375529.html
Copyright © 2011-2022 走看看