package com.bedrock.makemoney.designpattern.singletonmode.projectcase.bean;
public class SystemPropertyDetail
{
private String activeFlag;
private String propertyCode;
private String propertyDesc;
private String propertyValue;
public String getActiveFlag()
{
return activeFlag;
}
public void setActiveFlag(String activeFlag)
{
this.activeFlag = activeFlag;
}
public String getPropertyCode()
{
return propertyCode;
}
public void setPropertyCode(String propertyCode)
{
this.propertyCode = propertyCode;
}
public String getPropertyDesc()
{
return propertyDesc;
}
public void setPropertyDesc(String propertyDesc)
{
this.propertyDesc = propertyDesc;
}
public String getPropertyValue()
{
return propertyValue;
}
public void setPropertyValue(String propertyValue)
{
this.propertyValue = propertyValue;
}
}
package com.bedrock.makemoney.designpattern.singletonmode.projectcase.cache;
import com.bedrock.makemoney.designpattern.singletonmode.projectcase.bean.SystemPropertyDetail;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.Hashtable;
public enum SystemPropertyCache
{
INSTANCE;
private Hashtable<String, SystemPropertyDetail> systemPropertyHash = null;
public void populate(Collection<SystemPropertyDetail> systemPropertyList)
{
Hashtable<String, SystemPropertyDetail> newSystemPropertyHash = new Hashtable<>();
if (systemPropertyList != null)
{
for (Object object:systemPropertyList)
{
SystemPropertyDetail systemPropertyDetail = (SystemPropertyDetail) object;
if (systemPropertyDetail !=null)
{
newSystemPropertyHash.put(systemPropertyDetail.getPropertyCode(),systemPropertyDetail);
}
}
}
this.systemPropertyHash = newSystemPropertyHash;
}
@Contract("null -> null")
private SystemPropertyDetail lookup(String propertyCode)
{
if (propertyCode != null)
{
return systemPropertyHash.get(propertyCode);
}
return null;
}
@Nullable
public SystemPropertyDetail getSystemPropertyDetail(String propertyCode)
{
SystemPropertyDetail systemPropertyDetail = lookup(propertyCode);
if (systemPropertyDetail != null)
{
SystemPropertyDetail newSystemPropertyDetail = new SystemPropertyDetail();
newSystemPropertyDetail.setActiveFlag(systemPropertyDetail.getActiveFlag());
newSystemPropertyDetail.setPropertyCode(systemPropertyDetail.getPropertyCode());
newSystemPropertyDetail.setPropertyDesc(systemPropertyDetail.getPropertyDesc());
newSystemPropertyDetail.setPropertyValue(systemPropertyDetail.getPropertyValue());
return newSystemPropertyDetail;
}
return null;
}
@Nullable
public String getPropertyValue(String propertyCode)
{
SystemPropertyDetail systemPropertyDetail = lookup(propertyCode);
if (systemPropertyDetail != null)
{
return systemPropertyDetail.getPropertyValue();
}
return null;
}
}
package com.bedrock.makemoney.designpattern.singletonmode.projectcase.test;
import com.bedrock.makemoney.designpattern.singletonmode.projectcase.cache.SystemPropertyCache;
import com.bedrock.makemoney.designpattern.singletonmode.projectcase.bean.SystemPropertyDetail;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Objects;
public class ProjectCaseTest
{
public static void main(String[] args)
{
Collection<SystemPropertyDetail> collection = new ArrayList<>();
//项目中从DB读取,在server启动的时候加载
SystemPropertyDetail systemPropertyDetail = new SystemPropertyDetail();
systemPropertyDetail.setActiveFlag("A");
systemPropertyDetail.setPropertyCode("EXC");
systemPropertyDetail.setPropertyDesc("Enable XXX Check");
systemPropertyDetail.setPropertyValue("Y");
collection.add(systemPropertyDetail);
SystemPropertyCache.INSTANCE.populate(collection);
System.out.println(Objects.requireNonNull(SystemPropertyCache.INSTANCE.getSystemPropertyDetail("EXC")).getPropertyValue());
System.out.println(SystemPropertyCache.INSTANCE.getPropertyValue("EXC"));
if ("Y".equals(SystemPropertyCache.INSTANCE.getPropertyValue("EXC")))
{
System.out.println("====开关打开时,才做某些业务====");
}
}
}