简单优化 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());
}
}
测试结果:
- 闲着就写代码!!
- 忙了还得写代码!!!