假设我有一个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; }
}


这个FileWrapperClass中不必包含generateHashCode(),testHashCodeAgainst(Path)和defineFileType()的逻辑,如果可能会有数百万个此类FileWrapperClass对象,则可能不需要。

因此,我想到我可能会将其拉到另一个类,并使它们成为可在FileWrapperClass实例上运行的静态方法。这使我可以抽出除最基本的吸气剂和吸气剂以外的所有产品,例如:

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() { ... }
}


实际上,通过直接访问受保护的变量(尽管违反了OO原则。为获得性能提升值得吗?),从而使整个getter / setter动态无法实现会产生更好的性能吗?

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是任意数据。我试图从被实例化数百万次的类中删除尽可能多的代码,并将其放入具有多个静态方法的另一个单例类中,这些静态方法对被实例化数百万次的类的实例进行操作。
该设计模式有名称吗?
谢谢

最佳答案

我认为您是基于一些误解而建立了“模式”。


  generateHashCode(),testHashCodeAgainst(Path)和
  确定文件类型()不必包含在此文件中
  FileWrapperClass,如果有的话可能不应该这样
  可能有数百万个此类FileWrapperClass对象。


您是否认为该代码包含在数百万个实例中的每个实例中?如果是,则您错了,代码是共享的,创建单独的静态方法来处理它们没有好处。


  实际上,它不会产生更好的性能来替代整体
  getter / setter动态,支持直接访问受保护的变量
  (尽管违反了OO原则。值得为一个表演
  获得?),例如:


不,这里没有性能提升。这是微优化,无论如何JIT都将使它不必要。

总结一下,对不起,但是您在这里不是“忙于某事”,但是我希望您现在在“正确的道路上”。

07-24 21:08