代码优化--策略模式的四种表现

优化
if (type.equal("simple")) {
简单模式 SimplepolymorphismService
} else if (type.equal("middle")) {
中等 MiddlepolymorphismService
} else if (type.equal("hard")) {
复杂 HardpolymorphismService
}
结构。


1.多态的使用

main代码
SimplePolymorphismService simple = new SimplePolymorphismService();
        MiddlePolymorphismService middle = new MiddlePolymorphismService();
        HardPolymorphismService hard = new HardPolymorphismService();
        map.put("simple", restart);
        map.put("middle", middle);
        map.put("hard", hard);

        PolymorphismService poly = (PolymorphismService) map.get("simple");
        try {
            poly.run();
        } catch (Exception e) {
            e.printStackTrace();
        }

父类代码
public interface PolymorphismService {
    void run() throws Exception;
}

多个子类

class MiddlePolymorphismService implements PolymorphismService {

    public void run() throws Exception {
        System.out.println("middlePolymorphismService");
    }
}

class HardPolymorphismService implements PolymorphismService {

    public void run() throws Exception {
        System.out.println("hardPolymorphismService");
    }
}

此方法map需要手动放置,在使用中添加新的策略,可能会忽略放置。

 

2.枚举

在枚举类中定义执行方法

枚举类代码

public enum EnumBetterBetter {
FAST {
void run () { System.out.println("FAST enum"); } }, simple { void run () { System.out.println("simple nume"); } } ; abstract void run();
}

main执行代码
public static void main(String[] args) {

        EnumBetterBetter enumBetter =  EnumBetterBetter.valueOf("FAST");
        enumBetter.run();

        EnumBetterBetter enumBetter1 =  EnumBetterBetter.valueOf("simple");
        enumBetter1.run();

        EnumBetterBetter enumBetter3 =  EnumBetterBetter.FAST;
        enumBetter3.run();

        EnumBetterBetter enumBetter4 =  EnumBetterBetter.simple;
        enumBetter4.run();
        
    }    

执行结果

FAST enum
simple nume
FAST enum
simple nume

 

3.使用 Optional

Optional主要用于非空判断,由于是jdk8新特性,所以使用的不是特别多,但是用起来真的爽。

主要解决

if(user == null) {

}else {

 这种情况。

具体执行代码

Optional<String> userOptional = Optional.ofNullable(null);
        userOptional.map(action1).orElse(action2);
or 使用lambda表达式
Optional<String> userOptional = Optional.ofNullable(null);
        userOptional.map(list -> {
            return null;
        }).orElse("there have nothing");

4.数组小技巧

来自google解释,这是一种编程模式,叫做表驱动法,本质是从表里查询信息来代替逻辑语句。

比如通过月份来获取当月的天数。

问题代码

int getDay (int month) {
        if (month == 1) return 31;
        if (month == 2) return 29;
        if (month == 3) return 31;
        if (month == 4) return 30;
        if (month == 5) return 31;
        if (month == 6) return 30;
        if (month == 7) return 31;
        if (month == 8) return 31;
        if (month == 9) return 30; 
        if (month == 10) return 31;
        if (month == 11) return 30;
        if (month == 12) return 31;
    }

解决方式

int monthDay[] = {31,29,31,30,31,30,31,31,30,31,30,31};

    int getDays(int month) {
        return monthDay[--month];
    }

 

 

 
posted @ 2019-06-14 14:21  阿七o0  阅读(558)  评论(0编辑  收藏  举报