您好,登錄后才能下訂單哦!
在開發(fā)的場景中,常常會遇到打折的業(yè)務(wù)需求,每個用戶對應(yīng)的等級,他們的打折情況也是不一樣的。例如普通會員打9折,青銅會員打8.5折,黃金會員打8折等等。在一般開發(fā)中最簡單的就是判斷用戶的等級,然后對訂單作對應(yīng)的打折處理。
寫了一個簡單的小示例,如下所示:
//1 代表學(xué)生 2老師 3校長
int type = 1;
if (1 == type) {
System.out.println("學(xué)生笑嘻嘻的說話");
} else if (2 == type) {
System.out.println("老師開心的說話");
} else {
System.out.println("校長嚴(yán)肅的說話");
}
上面的代碼,是我們經(jīng)常的做法,代碼少的時候,看起來非常清晰,但是代碼多起來或者有了更多的判斷條件,那上面的代碼會更加的混亂,如果每次有修改,都要改動這部分代碼。
可以把上面的代碼改成多態(tài)方式,創(chuàng)建三個類,學(xué)生Student,老師Teacher,校長HeadMater,父類為Person,這三個類都實(shí)現(xiàn)父類的方法say,如下所示:
Person.class
package me.xueyao.service;
/**
* @author Simon.Xue
* @date 2019-12-01 14:31
**/
public interface Person {
void say();
}
Student.class
package me.xueyao.service.impl;
import me.xueyao.service.Person;
import org.springframework.stereotype.Service;
/**
* @author Simon.Xue
* @date 2019-12-01 14:34
**/
@Service
public class Student implements Person {
@Override
public void say() {
System.out.println("學(xué)生笑嘻嘻的說話");
}
}
Teacher.class
package me.xueyao.service.impl;
import me.xueyao.service.Person;
import org.springframework.stereotype.Service;
/**
* @author Simon.Xue
* @date 2019-12-01 14:37
**/
@Service
public class Teacher implements Person {
@Override
public void say() {
System.out.println("老師開心的說話");
}
}
HeadMaster.class
package me.xueyao.service.impl;
import me.xueyao.service.Person;
import org.springframework.stereotype.Service;
/**
* @author Simon.Xue
* @date 2019-12-01 14:41
**/
@Service
public class HeadMaster implements Person {
@Override
public void say() {
System.out.println("校長嚴(yán)肅的說話");
}
}
測試方法
@Test
public void testSay() {
Person student = new Student();
student.say();
Person teacher = new Teacher();
teacher.say();
Person headMaster = new HeadMaster();
headMaster.say();
}
上面的這種做法,基本上是完成了優(yōu)化,但是我們還會發(fā)現(xiàn)了一個問題,就是每次我們還是要創(chuàng)建對應(yīng)的對象。上面有三個類,我們就要創(chuàng)建有三個對象,能否再次優(yōu)化一下?
因為現(xiàn)在項目用Sping框架,所以可以用注入來完成優(yōu)化。
首先,創(chuàng)建一個Person枚舉類,如下所示:
package me.xueyao.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import me.xueyao.service.impl.HeadMaster;
import me.xueyao.service.impl.Student;
import me.xueyao.service.impl.Teacher;
/**
* @author Simon.Xue
* @date 2019-12-01 15:55
**/
@AllArgsConstructor
@Getter
public enum PersonEnums {
STUDENT(1, "學(xué)生", Student.class),
TEACHER(2, "老師", Teacher.class),
HEADMASTER(3, "校長", HeadMaster.class);
Integer code;
String msg;
Class clazz;
/**
* 獲得類的名稱,因為Spring自動注入時,默認(rèn)名稱是類名(首字母小寫)
* @param code
* @return
*/
public static String className(Integer code) {
for (PersonEnums value : values()) {
if (value.getCode().equals(code)) {
String simpleName = value.getClazz().getSimpleName();
simpleName.substring(1);
return String.valueOf(simpleName.charAt(0)).toLowerCase() + simpleName.substring(1);
}
}
return "";
}
}
使用方式 :
@Autowired
private Map<String, Person> personMap = new HashMap<>();
@Test
public void testSay() {
personMap.get(PersonEnums.className(2)).say();
}
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。