簡單優化 if else
阿新 • • 發佈:2020-08-10
簡單優化 if else
1、 阿里程式設計歸約
if語句使用“衛語句 ”減少層級巢狀。
一臉的大寫的懵逼,“衛語句”是什麼東東?趕緊找度媽。
衛語句就是把複雜的條件表示式拆分成多個條件表示式,比如一個很複雜的表示式,嵌套了好幾層的if - else語句,轉換為多個if語句,實現它的邏輯,這多條的if語句就是衛語句.
if(obj != null){
doSomething();
}
//轉換成衛語句以後的程式碼如下:
if(obj == null){
return;
}
doSomething();
衛語句的好處是條件表示式之間相互獨立,不會互擾。
2、陣列
場景:定義一個方法,獲取星期數。
private static String getWeekDay(int weekStat) { if (0 == weekStat) { return "星期天"; } if (1 == weekStat) { return "星期一"; } if (2 == weekStat){ return "星期二"; } if (3 == weekStat){ return "星期三"; } if (4 == weekStat){ return "星期四"; } if (5 == weekStat){ return "星期五"; } if (6 == weekStat){ return "星期六"; } return null; } // 使用該方法獲取星期六 System.out.println(getWeekDay(6));
使用陣列優化:
String[] week = {
"星期天",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六"
};
// 使用陣列獲取星期六
System.out.println(week[6])
3、策略設計模式
3.1 列舉實現
定義一個列舉類:
/** * 定義了一週的每一天要幹什麼 */ enum WeekDay { /**星期天要作甚?*/ Sunday("Sunday"){ @Override void weekRun() { System.out.println(weekName + ":和朋友出去玩!"); } }, /**星期1要作甚?*/ Monday("Monday"){ @Override void weekRun() { System.out.println(weekName + ":在學校學習英語"); } }, /**星期2要作甚?*/ Tuesday("Tuesday"){ @Override void weekRun() { System.out.println(weekName + ":在學校學習java"); } }, /**星期3要作甚?*/ Wednesday("Wednesday"){ @Override void weekRun() { System.out.println(weekName + ":在學校學習語文"); } }, /**星期4要作甚?*/ Thursday("Thursday"){ @Override void weekRun() { System.out.println(weekName + ":在學校學習歷史"); } }, /**星期5要作甚?*/ Friday("Friday"){ @Override void weekRun() { System.out.println(weekName + "在學校玩"); } }, /**星期6要作甚?*/ Saturday("Saturday"){ @Override void weekRun() { System.out.println(weekName + "和朋友在家看電影"); } }; public String weekName; abstract void weekRun(); WeekDay(String weekName){ this.weekName = weekName; } }
使用該列舉類:
public class Demo {
public static void main(String[] args) {
// 呼叫的寫法1
WeekDay.valueOf("Sunday").weekRun();
// 呼叫的寫法2
WeekDay.Monday.weekRun();
}
}
3.2 多型實現
抽象一個跑的行為
/**
* 跑的行為抽象
*/
@FunctionalInterface
interface RunStrategy {
void run();
}
針對該行為抽象,有幾種實現:
/**
* 人跑的行為
*/
class PeopleRunStrategy implements RunStrategy {
@Override
public void run() {
System.out.println("人用腿跑");
}
}
/**
* 汽車跑的行為
*/
class CarRunStrategy implements RunStrategy {
@Override
public void run() {
System.out.println("汽車用輪子跑");
}
}
/**
* 魚跑的行為
*/
class FishRunStrategy implements RunStrategy {
@Override
public void run() {
System.out.println("魚在水裡遊");
}
}
使用對映來呼叫:
Map<String, RunStrategy> runStrategyMap = new HashMap<>(16);
runStrategyMap.put("people", new PeopleRunStrategy());
runStrategyMap.put("car", new CarRunStrategy());
runStrategyMap.put("fish", new FishRunStrategy());
// 獲取汽車的跑的實現,當沒有該實現時,呼叫人的跑的實現
RunStrategy runStrategy1 = runStrategyMap.getOrDefault("car", new PeopleRunStrategy());
// 獲取鳥的跑的實現,當沒有該實現時,呼叫人的跑的實現
RunStrategy runStrategy2 = runStrategyMap.getOrDefault("bird", new PeopleRunStrategy());
// 列印:汽車用輪子跑
runStrategy1.run();
// 列印:人用腿跑
runStrategy2.run();
4、 狀態設計模式
抽象狀態行為介面:
/**
* Created by Feng on 2020/1/4 11:37<br>
* 抽象狀態行為:定義不同狀態對應的方法
* 方法的實現由其實現類完成
*/
@FunctionalInterface
interface State {
void handle();
}
具體的狀態類:
/**
* 具體的狀態類:空閒狀態
*/
class FreeState implements State {
@Override
public void handle() {
System.out.println("閒著就寫程式碼!!");
}
}
/**
* 具體的狀態類:繁忙狀態
*/
class BusyState implements State {
@Override
public void handle() {
System.out.println("忙了還得寫程式碼!!!");
}
}
State 上下文:
/**
* 在環境中維護一個抽象狀態類 State 的例項,這個例項定義當前狀態。
* 還可以定義初始狀態
*/
class Context {
private State state;
/**
* 設定狀態:呼叫handle方法
*/
public void setState(State state){
this.state = state;
state.handle();
}
public State getState(){
return state;
}
}
測試:
/**
* 客戶端:測試
*/
public class ContextClient {
public static void main(String[] args) {
Context context = new Context();
context.setState(new FreeState());
context.setState(new BusyState());
}
}
測試結果:
- 閒著就寫程式碼!!
- 忙了還得寫程式碼!!!