还是关于if else if else优化问题?
下面这段代码,因为针对不同的版本,要才有不同的处理逻辑。如果以后再有版本还是再里面建判断,但是感觉这个也不太适合用策略模式,因为逻辑太少了,希望大家帮忙看一下,xiexie
下面是代码入口
private String createNccSign(String version,String appPubKey,String appSecret){
if(NcVersionEnum.NC_VERSION_2005.getVersion().equals(version)){
return SHA256Util.getSHA256(CLIENT_ID + CLIENT_SECRET + PUBKEY);
}else if(NcVersionEnum.NC_VERSION_2105.getVersion().equals(version) ||
NcVersionEnum.NC_VERSION_2111.getVersion().equals(version)){
return SHA256Util.getSHA256(CLIENT_ID + CLIENT_SECRET + PUBKEY, PUBKEY);
}else if(NcVersionEnum.NC_VERSION_2207.getVersion().equals(version)){
return SHA256Util.getSHA256(CLIENT_ID + appSecret + appPubKey, appPubKey);
}
return "";
}
这是是定义的枚举类:
public enum NcVersionEnum {
NC_VERSION_2005("ncc_2005_native"),
NC_VERSION_2105("ncc_2105_native"),
NC_VERSION_2111("ncc_2111_native"),
NC_VERSION_2207("ncc_202207"),
DEFAULT_ERP_VERSION("NC");
private static final List<NcVersionEnum> ncVersionEnums = new ArrayList<>();
static {
ncVersionEnums.add(NC_VERSION_2005);
ncVersionEnums.add(NC_VERSION_2105);
ncVersionEnums.add(NC_VERSION_2111);
ncVersionEnums.add(NC_VERSION_2207);
}
private String version;
NcVersionEnum( String version) {
this.version = version;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
/**
* 根据版本得到对应的枚举类。
* @param version 版本
* @return 对应的枚举类,如果没有返回默认版本
*/
public static NcVersionEnum getByVersion(String version) {
for (NcVersionEnum versionEnum : NcVersionEnum.values()) {
if (versionEnum.getVersion().equals(version)) {
return versionEnum;
}
}
return DEFAULT_ERP_VERSION;
}
/**
* 根据枚举类的版本得到是否需要走
* @param ncVersionEnum
* @return
*/
public static boolean isNCCVersion(NcVersionEnum ncVersionEnum){
return ncVersionEnums.contains(ncVersionEnum);
}
}
下面是根据判断分别要走的加密
public static String getSHA256(String str, String key) {
//加盐
byte[] salt = new byte[16];
try {
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
random.setSeed(key.getBytes());
random.nextBytes(salt);
} catch (NoSuchAlgorithmException ignore) {
//加密算法固定,不会抛出该异常
}
String saltValue = Base64Util.encryptBASE64(salt);
return getSHA256(str + saltValue.replaceAll("[\r\n]", ""));
}
public static String getSHA256(String str) {
MessageDigest messageDigest;
String encodestr = "";
try {
messageDigest = MessageDigest.getInstance("SHA-256");
messageDigest.update(str.getBytes(StandardCharsets.UTF_8));
encodestr = byte2Hex(messageDigest.digest());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
return encodestr;
}
一般这种情况应该怎么优化,万一以后再加个版本啥的。
备注:这种大写的都是写死的CLIENT_ID
这种小写 appSecret的都是传进来的,针对不同的版本有的要传进来,有的写死的。