假设我有一个Path对象的包装类,我想要存储一些其他信息:例如hashCode和fileType。
public class FileWrapperClass {
private Path thePath;
private String hashCode;
private String fileType;
...
public void setPathFromUserInput(JFrame whatever) { ... }
public void generateHashCode() { ... }
public boolean testHashCodeAgainst(Path testAgainstMe) { ... }
public void determineFileType() { ... }
...
public Path getPath() { return thePath; }
public void setPath(Path thePath) { this.thePath = thePath; }
public String getHashCode() { return hashCode; }
public String getFileType() { return fileType; }
}
generateWashCode(),testHashCodeAgainst(Path)和determineFileType()的逻辑不必包含在此FileWrapperClass中,如果有可能存在数百万个这些FileWrapperClass对象,则可能不应该包含该逻辑。
所以,我发现我可能将它拉到另一个类并使它们成为在FileWrapperClass实例上运行的静态方法。这让我可以拿出除最基本的getter和setter之外的所有内容,如下所示:
public class FileWrapperClass {
private Path thePath;
private String hashCode;
private String fileType;
...
public Path getPath() { return thePath; }
public void setPath(Path thePath) { this.thePath = thePath; }
public String getHashCode() { return hashCode; }
public void setHashCode(String hashCode) { this.hashCode = hashCode; }
public String getFileType() { return fileType; }
public String setFileType(String fileType) { this.fileType = fileType; }
}
public class FileWrapperClassOperator {
public static void setPathFromUserInput(JFrame whatever) { ... }
public static void generateHashCode() { ... }
public static boolean testHashCodeAgainst(Path testAgainstMe) { ... }
public static void determineFileType() { ... }
}
事实上,它不会产生更好的性能来改变整个getter / setter动态以支持直接访问受保护的变量(尽管违反了OO原则......它是否值得获得性能?),如: / p>
public class FileWrapperClass {
public Path thePath;
public String hashCode;
public String fileType;
...
}
public class FileWrapperClassOperator {
public static void setPathFromUserInput(JFrame whatever) { ... }
public static void generateHashCode() { ... }
public static boolean testHashCodeAgainst(Path testAgainstMe) { ... }
public static void determineFileType() { ... }
}
我觉得我在这里做点什么。如果它是一个现有的设计模式,那么我想知道它是什么,以便我可以学习它并编码。如果没有,那么任务就是优化这个概念。
要清楚,hashCode和fileType是任意数据。我试图从被实例化数百万次的类中删除尽可能多的代码,并将其放在另一个单独的类中,其中包含一组静态方法,这些方法在类的实例上运行数百万次实例化。 那个设计模式有名字吗? 感谢
答案 0 :(得分:2)
我认为你的“模式”基于一些误解。
generateHashCode(),testHashCodeAgainst(Path)和的逻辑 determineFileType()不必包含在此中 FileWrapperClass,如果有的话,可能不应该是 可能有数百万个这些FileWrapperClass对象。
您是否认为代码包含在数百万个实例中?如果是,那么你错了,代码是共享的,创建单独的静态方法来处理它们没有任何优势。
事实上,它不会产生更好的性能来整体化 getter / setter动态支持直接访问受保护的变量 (尽管违反OO原则......对于表演来说是值得的 获得?),如:
不,这里没有涉及性能提升。这是微观优化,无论如何都将使JIT变得不必要。
所以作为结论,抱歉,但你不是“在某事上”,但我希望你现在“走上正确的道路”。
答案 1 :(得分:1)
这听起来像Anemic Domain Model和Premature Optimization之间的组合。