真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

代碼優(yōu)化-多態(tài)代替IF條件判斷

場景描述

在開發(fā)的場景中,常常會遇到打折的業(yè)務(wù)需求,每個(gè)用戶對應(yīng)的等級,他們的打折情況也是不一樣的。例如普通會員打9折,青銅會員打8.5折,黃金會員打8折等等。在一般開發(fā)中最簡單的就是判斷用戶的等級,然后對訂單作對應(yīng)的打折處理。

創(chuàng)新互聯(lián)公司10多年成都企業(yè)網(wǎng)站定制服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及高端網(wǎng)站定制服務(wù),成都企業(yè)網(wǎng)站定制及推廣,對生料攪拌車等多個(gè)方面擁有豐富的網(wǎng)站制作經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。

場景示例

寫了一個(gè)簡單的小示例,如下所示:

//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)常的做法,代碼少的時(shí)候,看起來非常清晰,但是代碼多起來或者有了更多的判斷條件,那上面的代碼會更加的混亂,如果每次有修改,都要改動這部分代碼。

解決方法

可以把上面的代碼改成多態(tài)方式,創(chuàng)建三個(gè)類,學(xué)生Student,老師Teacher,校長HeadMater,父類為Person,這三個(gè)類都實(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)化

上面的這種做法,基本上是完成了優(yōu)化,但是我們還會發(fā)現(xiàn)了一個(gè)問題,就是每次我們還是要?jiǎng)?chuàng)建對應(yīng)的對象。上面有三個(gè)類,我們就要?jiǎng)?chuàng)建有三個(gè)對象,能否再次優(yōu)化一下?

因?yàn)楝F(xiàn)在項(xiàng)目用Sping框架,所以可以用注入來完成優(yōu)化。

首先,創(chuàng)建一個(gè)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;

    /**
     * 獲得類的名稱,因?yàn)镾pring自動注入時(shí),默認(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 personMap = new HashMap<>();
@Test
public void testSay() {
    personMap.get(PersonEnums.className(2)).say();
}

文章名稱:代碼優(yōu)化-多態(tài)代替IF條件判斷
文章位置:http://weahome.cn/article/ihidoh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部