优化
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]; }