避免从高级类到低级类传递参数

Gab*_*lin 5 java oop solid-principles

在我的 Java Web 服务器项目中,我的Main.main方法采用一个参数来指定它将在其中查找某些文件的目录,稍后我将使用该文件。我的问题是,我实际上并没有在我的高级别课程中对这个论点做任何事情,但我的一些低级别课程需要这些信息。

当然,解析和存储我的命令行参数的类是最先使用的类之一,即我的最高级别的类之一,因此我正在努力寻找一种方法来使我的低级别可以访问命令行参数。级别课程。

似乎我唯一的两个选择是要么将它一直传递下去,通过除了将其传递到下一个级别之外从不触及参数的类,或者给它一个全局范围。从设计的角度来看,这两个似乎都不是很好的选择,所以我想知道是否有我缺少的替代方案,或者我是否必须选择两害相权取其轻——或者完全改变我的课程的结构方式。

Vad*_*dim 0

是的,有很多选择可以做到这一点:

  1. 正如您所说,将其一路向下传递 - 可能,但不太好,因为绝对所有调用路径中的所有方法都必须将其作为参数。
  2. 使用系统属性代替main方法参数并且

    A。称你的主要为>java -Dmy.path=path_to_directoryMain

    b. 使用环境变量

    >set my.path=path_to_directory
    >java Main

    C。在方法中设置main

    public void main(String[] args) {
    System.getProperties().put("my.path",args[dirPathIndex]);

    在所有情况下,您都可以在代码中的任何位置获取值,如下所示:

    String dirPath=System.getProperty("my.path");

  3. 在主类中创建一个小型本地静态“缓存”

    public class Main{

    public static String dirPath;

    public void main(String[] args) {
    dirPath= args[dirPathIndex];

然后,您还可以在代码中的任何位置将其获取为:

   `String dPath=Main.dirPath;`
Run Code Online (Sandbox Code Playgroud)

当然,围绕“本地缓存”方法还有更多选择,但主要思想仍然相同。将值保留在某处,您可以在代码中的任何位置获取它。