我正在创建一个应用程序,并在前面检查用户是否是管理员、用户、版主或 super 管理员。在此基础上我创建了一个不同的 XML。
所以我当前所做的就是在方法参数中传递一个字符串,将对象转换为 XML,以指定它应该使用哪个映射。然而,传递这些字符串并不好。有什么模式可以做得更好吗?
我可以将角色检查引入到映射类中,然后将映射 ID 更改为与当前用户的角色相同。但我认为安全检查不适合这些类别。
您是否会创建一个枚举来保留角色并传递它而不是字符串?
或者创建不同的类并使用工厂返回正确的对象?
最佳答案
通用接口(interface)方法
通过在所有返回对象之间实现通用接口(interface),您可以开发一些 loose coupling在你的代码中。例如:
public interface XmlReturn
{
public void displayXML(); // Just an example method.
}
以及实现此接口(interface)的类:
public class AdminXmlReturn implements XmlReturn
{
public void displayXML() { // Some code here for the admin XML }
}
有了这个,您可以生成某种带有鉴别器的工厂:
public abstract class XmlFactory
{
public static XmlReturn getInstance(String type)
{
// Using string as an example type. Doesn't need to be.
if(type.equals("Admin")) {
return new AdminXmlReturn();
}
}
}
通过通过对象的接口(interface)类型引用该对象,您可以生成任意数量的不同 XML
文件,而无需更改任何代码。 IE:
public void loadPage(String permission)
{
// permission can be any type. This is just an example.
XmlReturn xml = XmlFactory.getInstance(permission);
xml.displayXML();
// This method exists in all objects that implement XmlReturn
}
优点
此方法的主要优点是您可以根据需要添加任意数量的新 XML 文件和权限,并且无需更改加载 XML 的代码。这种“关注点分离”将帮助您使您的程序变得非常易于管理和扩展。
通过将决策逻辑移植到工厂,您可以帮助提高代码的可读性,并且如果您打算共享代码,则可以让其他人从程序内部工作的细节中抽象出来。
关于java - 如何避免在多个地方对同一事物进行可能很长的 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16458181/