JAVA设计模式学习--008-构造器模式

17 篇文章 0 订阅

一 、概念

构造器模式(Builder Pattern)。其核心思想是将一个“复杂对象的构建算法”与它的“部件及组装方式”分离,使得构件算法和组装方式可以独立应对变化;复用同样的构建算法可以创建不同的表示,不同的构建过程可以复用相同的部件组装方式。

二、编码

import java.util.Set;

/**
 * 使用构造器模式:保证一些非必需参数的灵活性,便于后期扩展
* @ClassName: ParameterSet
* @Description: 参数集合
* @Author: liulianglin
* @DateTime 2022年3月18日 下午4:56:33
 */
public class ParameterSet {
	/**
	 * 名称(非必需参数)
	 */
	private String name;
	/**
	 * 版本(非必需参数)
	 */
	private String version;
	/**
	 * 管理对象(必需参数)
	 */
	private String managedObject;
	/**
	 * 管理参数(必需参数):(为管理对象下属的一些参数)
	 */
	private Set<String> parameterSet;
	
	private ParameterSet(Builder builder) {
		this.name = builder.name;
		this.version = builder.version;
		this.managedObject = builder.managedObject;
		this.parameterSet = builder.parameterSet;
	}
	
	/**
	 * 校验该参数集是否合规:即parameters里的参数都应该是objectPrefix指向对象的最近的子叶子节点
	 * 
	 * @param objectPrefix
	 * @param parameters
	 * @return
	 */
	private boolean validate() {
		// 非有效参数集
		if (managedObject == null || parameterSet == null || parameterSet.isEmpty()) {
			return false;
		}
		for (String parameter : parameterSet) {
			// 参数并非managedObject下的参数
			if (parameter.contains(managedObject) == false) {
				return false;
				// 参数并非managedObject下直接的参数,中间还有多实例类型节点
			} else if (parameter.substring(managedObject.length()).contains("{i}")) {
				return false;
			}
		}
		return true;
	}

	public static class Builder {
		/**
		 * 名称(非必需参数)
		 */
		private String name;
		/**
		 * 版本(非必需参数)
		 */
		private String version;
		/**
		 * 管理对象(必需参数)
		 */
		private String managedObject;
		/**
		 * 管理参数(必需参数):(为管理对象下属的一些参数)
		 */
		private Set<String> parameterSet;

		public Builder(String managedObject, Set<String> parameterSet) {
			this.managedObject = managedObject;
			this.parameterSet = parameterSet;
		}

		public Builder setName(String name) {
			this.name = name;
			return this;
		}

		public Builder setVersion(String version) {
			this.version = version;
			return this;
		}

		public ParameterSet build() {
			return new ParameterSet(this);
		}

	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getVersion() {
		return version;
	}

	public void setVersion(String version) {
		this.version = version;
	}

	public String getManagedObject() {
		return managedObject;
	}

	public void setManagedObject(String managedObject) {
		this.managedObject = managedObject;
	}

	public Set<String> getParameterSet() {
		return parameterSet;
	}

	public void setParameterSet(Set<String> parameterSet) {
		this.parameterSet = parameterSet;
	}

}

因为类中涉及到一些非必须参数,当我们像创建一个ParameterSet实例的时候,如果使用传统的方式,可能就需要通过创建一大堆的构造函数来满足不同场景需求,类似:

   	public ParameterSet(String name, String version) {
		this.name = name;
		this.version = version;
	}
	
	public ParameterSet(String name, String version, String managedObject) {
		this.name = name;
		this.version = version;
		this.managedObject = managedObject;
	}

    .....

通过使用构造器模式,使得实例的构造过程更灵活,可以按需进行非必需参数的赋值:

ParameterSet computer=new ParameterSet.Builder(objectKey,parameterSet)
.setName("测试参数集合")
.build();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值