教您如何重写“ if-else”很帅

如果不是,这是正常的编码习惯。

当我们的代码很小时,进行条件判断是不容易的。

但是对于优秀的程序员来说,这不是好的代码。

如果您不相信我,请向下看... 1.监护人声明会提前返回。

假设如果(condition){//做某事} else {return xxx;},则存在以下代码:通过否定判断条件,如果(!condition){return xxx;} //事物2.使用Optional简化是否为空确定2.1简化1级空确定假设是否具有以下代码:if(输入!= null){//返回值1}否则{//返回值2}使用Optional之后,返回Optional。

ofNullable(input).map(value1).orElse(value2); 2.2如果(input!= null& amp; input.getUser()!= null& amp; input.getUser()。

getName( )!= null){//执行操作1},否则{//执行操作2} Optional.ofNullable(input).map(Input :: getUser)使用Optional之后。

map(User :: getName).map(action1).orElse(action2);对于没有其他场景的场景,请使用ifPresent来执行if(input!= null&& input.getUser()!= null& amp; input.getUser.getName()!= null) {//做动作} Optional.ofNullable(input).map(Input :: getUser).map(User :: getName).ifPresent(action); 3.策略模式的假设以下代码:if(“ dog” .equals(petType)){//处理狗} else if(“ cat” .equals(petType)){//处理cat} else if( “ pig” .equals(petType)){//处理Pig}否则,如果(“ rabbit” .equals(petType)){//处理Rabbit}否则,{引发新的UnsupportedOperationException();这不是要根据不同的参数类型遵循不同的代码逻辑。

这种情况很常见,他还会切换case出现:switch(petType){case“ dog”://处理dog break;案例“ cat”://处理cat break;情况“猪”://处理猪休息;案例“兔子”://处理兔子休息;默认值:抛出新的UnsupportedOperationException(); }不同的代码逻辑代表不同的策略,我们可以通过以下方式对其进行重写。

3.1多态公共接口策略{void invoke(); //处理每个逻辑}公共类DogStrategy实现策略{@Override public void invoke(){//处理狗}}公共类CatStrategy实现策略{@Override public void invoke(){//处理cat}公共类PigStrategy实现策略{@Override public void invoke(){// handle pig}}公共类RabbitStrategy实现策略{@Override public void invoke(){// handle}}特定策略可以将对象放置在Map中,优化的实现是类似于以下策略策略= map.get(petType); stratefy.invoke();还有两种方法可以引用如何将其存储在地图中。

3.1.1静态表Map< String,Strategy& gt; map = ImmutableMap。

< String,Strategy& gt; builder().put(“ dog”,new DogStrategy()).put(“ cat”,new CatStrategy()).put(“ pig” ,新的PigStrategy()).put(“兔子”,新的RabbitStrategy()).build(); 3.1.2在Spring托管下的动态注册定义了一个注册中心,以接受注册信息公共枚举StrategyMapping {INSTANCE;私有最终Map& lt; String,Classextends Strategy& gt; map = new ConcurrentHashMap& lt;& gt;(); public void register(String type,Classextends Strategy& gt; clazz){map.put(type,clazz);} public Strategy getStrategy(String type){Classextends Strategy& gt; clazz = map.get(type); if(clazz == null){抛出新的UnregisteredException();}返回SpringContextHolder.getBean(clazz);}}将每个策略移交给Spring管理,并注册@Component公共类DogStrategy实现策略{@PostConstruct public void init() {StrategyMapping.INSTANCE.register(“ dog”,this.getClass());} @Override public void invoke(){// handle dog}}使用方法变为Strategy Strategy = StrategyMapping.INSTANCE.getStrategy(pet Type) ; stratefy.invoke(); 3.2使用多态进行枚举将生成许多其他策略类。

如果预先将petType定义为枚举,则会发现可以将Strategy中的invoke()方法放入枚举中。

这样,映射关系就完成了。

公共枚举PetType {DOG {@Override public void invoke(){// handle dog}},CAT {@Override public void invoke(){// handle cat}},PIG {@Override public void invoke(){//正在处理Pig}},兔子[@Override public void invoke(){//正在处理Rabbit}};公共抽象无效invoke(); }因此,调用时的代码类似于以下代码:PetType petType = PetType.valueOf(type.toUpperCase(Locale.ROOT)); petType.invoke(); 3.3功能简化策略也面临多态性,这将产生许多其他策略问题。

除了枚举,我们还可以使用函数m

客服
分享
电话
服务电话:
TOP
深圳市相信过程科技有限公司❤舒先生❤欢迎您的咨询 深圳市相信过程科技有限公司❤舒先生❤欢迎您的咨询
服务电话
联系我们

    深圳市相信过程科技有限公司❤舒先生❤欢迎您的咨询