网站导航优化的描述,wordpress 主题吧,俄罗斯网站开发,网站备案弊端if else 工厂模式面向对象语言具有非常强大的多态性功能#xff0c;用于删除代码中的if / else或切换大小写。 没有条件的代码易于阅读。 在某些地方必须放置它们#xff0c;其中一个示例是Factory / ServiceProvider类。 我敢肯定#xff0c;您已经看到IF-ELSEIF的工厂课… if else 工厂模式 面向对象语言具有非常强大的多态性功能用于删除代码中的if / else或切换大小写。 没有条件的代码易于阅读。 在某些地方必须放置它们其中一个示例是Factory / ServiceProvider类。 我敢肯定您已经看到IF-ELSEIF的工厂课程在不断扩大。 在此博客中我将分享一些技巧您可以使用这些技巧消除工厂课堂上的情况。 我将使用以下代码段作为示例 public static Validator newInstance(String validatorType) {if (INT.equals(validatorType))return new IntValidator();else if (DATE.equals(validatorType))return new DateValidator();else if (LOOKUPVALUE.equals(validatorType))return new LookupValueValidator();else if (STRINGPATTERN.equals(validatorType))return new StringPatternValidator();return null;}反射 这是您要删除条件时想到的第一件事。 您会感到框架开发人员的感觉 public static Validator newInstance(String validatorClass) {return Class.forName(validatorClass).newInstance(); } 这看起来很简单但唯一的问题是调用者必须记住完全限定的类名并且有时可能会出现问题。 地图 映射可用于将实际的类实例映射到一些用户友好的名称 MapString, Validator validators new HashMapString,Validator(){{put(INT,new IntValidator());put(LOOKUPVALUE,new LookupValueValidator());put(DATE,new DateValidator());put(STRINGPATTERN,new StringPatternValidator());}};public Validator newInstance(String validatorType) {return validators.get(validatorType);} 这看起来也很整洁没有反射的开销。 枚举 这很有趣 enum ValidatorType {INT {public Validator create() {return new IntValidator();}},LOOKUPVALUE {public Validator create() {return new LookupValueValidator();}},DATE {public Validator create() {return new DateValidator();}};public Validator create() {return null;}}public Validator newInstance(ValidatorType validatorType) {return validatorType.create();} 此方法使用enum方法删除条件问题之一是每种类型都需要Enum。 您不想创建大量的文件 我个人喜欢这种方法。 结论 如果使用else或switch大小写会使代码难以理解则应尽量避免使用它们。 应该使用语言构造来避免某些切换情况。 我们应该尝试在没有IF-ELSE的情况下进行编码这将迫使我们提出更好的解决方案。 翻译自: https://www.javacodegeeks.com/2014/10/factory-without-if-else.htmlif else 工厂模式