一 、概念
构造器模式(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();