建造者模式设计模式

设计模式建造者模式:建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。

1.创建要构建的对象

/**
 * 视图
 *
 *<hr>
 * @author hanjidong
 * @date 2020年11月23日 上午11:07:02
 * @since 0.0.1
 */
@Data
@Getter
@Setter
public class View {
	/**
	 * 视图基本信息
	 */
	private SeReqView viewInfo;
	/**
	 * 视图条件级
	 */
	private List<SeReqViewConditionGroup> group;
	/**
	 * 视图字段关系表
	 */
	private List<SeReqViewAttrRela> viewRela;
	

}

2.创建builder抽象类

/**
 * 抽象 builder 类 
 *
 *<hr>
 * @author hanjidong
 * @date 2020年11月23日 上午11:18:03
 * @since 0.0.1
 */
public abstract class Builder {
	/**
	 * 创建视图基本信息
	 *
	 *<hr>
	 * @author hanjidong
	 * @date 2020年11月23日 上午11:18:17
	 * @since 0.0.1
	 * @param docId
	 * void
	 */
	public abstract void buildView(String docId); 
    /**
     * 创建条件集基本信息
     *
     *<hr>
     * @author hanjidong
     * @date 2020年11月23日 上午11:18:25
     * @since 0.0.1
     * void
     */
	public abstract void buildGroup(); 
    /**
     * 创建字段属性基本信息
     *
     *<hr>
     * @author hanjidong
     * @date 2020年11月23日 上午11:18:34
     * @since 0.0.1
     * void
     */
	public abstract void buildAttrRela(); 
    /**
     * 创建视图
     *
     *<hr>
     * @author hanjidong
     * @date 2020年11月23日 上午11:18:45
     * @since 0.0.1
     * @return
     * View
     */
	public abstract View createView();
   
}

3.创建具体的builder的抽象类


/**
 * 基础视图创建类
 *
 *<hr>
 * @author hanjidong
 * @date 2020年11月23日 上午11:07:39
 * @since 0.0.1
 */
@Component
public class BaseBuilder extends Builder{
	Log log = LogFactory.getLog(this.getClass());

	View viewInfo = new View();
	/**
	 * 创建视图信息 创建者默认system
	 */
	@Override
	public void buildView(String docId) {
		SeReqView view = new SeReqView();
		
		viewInfo.setViewInfo(view);
	}

	/**
	 * 创建视图条件租
	 */
	@Override
	public void buildGroup() {
		SeReqView view = viewInfo.getViewInfo();
		List<SeReqViewConditionGroup> groups = wrapGroups(view);
		viewInfo.setGroup(groups);
	}

	

	/**
	 * 构建文档视图关系表
	 */
	@Override
	public void buildAttrRela() {
		SeReqView view = viewInfo.getViewInfo();
		if(view == null){
			log.info("buildAttrRela 创建文档视图属关系失败,没有默认的视图");
			return ;
		}
		List<SeReqViewAttrRela> lstPo = new ArrayList<>();
		wrapRelaAttr(view, lstPo);
		relaDao.batchAdd(lstPo);
		viewInfo.setViewRela(lstPo);
	}


	/**
	 *返回视图实体
	 */
	@Override
	public View createView() {
		return viewInfo;
	}

}

4.创建调用者

/**
 * 导演类
 *
 *<hr>
 * @author hanjidong
 * @date 2020年11月23日 上午11:05:40
 * @since 0.0.1
 */
@Component
@Async
public class ViewDirector {
	Log log = LogFactory.getLog(this.getClass());
	/**
	 * 基础视图创建builder
	 */
	@Autowired
	private BaseBuilder builder;
	
	/** 
	 * 把导演类中的createView()方法合并到抽象建造者类中 
	 * 
	 * @return 具体产品对象 
	 */ 
	@Transactional
	public View createView(String docId) {
		builder.buildView(docId); 
		builder.buildGroup(); 
		builder.buildAttrRela(); 
		return builder.createView(); 
	} 
}

调用

@Componet
public class TestBuilder{
    @Autowired
	private ViewDirector viewDirector;

    public void save() {	
        viewDirector.createView("aaa");
    }
}

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值