Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用不同的方法和对象设计模式初始化_Java_Design Patterns - Fatal编程技术网

Java 使用不同的方法和对象设计模式初始化

Java 使用不同的方法和对象设计模式初始化,java,design-patterns,Java,Design Patterns,我是新的设计模式,我不知道我必须在这种情况下应用。 我在一个文件中有一些数据,所以我必须对这些数据建模,然后用这些数据开始一个类 对于文件的读取和建模,我选择应用Dao模式,因此有接口(interface)和his实现(InterfaceImplementation),它们读取文件并返回模型数据(DataModel)。 在我必须用那个模型数据实例化另一个类(Runner)之后,我调用它的一个方法。 这就是我所做的: public class Factory { public void st

我是新的设计模式,我不知道我必须在这种情况下应用。 我在一个文件中有一些数据,所以我必须对这些数据建模,然后用这些数据开始一个类

对于文件的读取和建模,我选择应用Dao模式,因此有接口(interface)和his实现(InterfaceImplementation),它们读取文件并返回模型数据(DataModel)。 在我必须用那个模型数据实例化另一个类(Runner)之后,我调用它的一个方法。 这就是我所做的:

public class Factory {
   public void start() {
      Interface dao = new InterfaceImplementation();
      DataModel data = dao.getDataModel();
      Runner runner = new Runner(data);
      runner.run();
   }
}
因此,客户端只调用方法
newfactory().start()

我对这个解决方案有些怀疑,我认为这不是一个好的解决方案,也不是一个很好的工厂模式应用

干杯,我希望我已经干净了

public class Factory {
   public void start() {
      Interface dao = new InterfaceImplementation();
      DataModel data = dao.getDataModel();
      Runner runner = new Runner(data);
      runner.run();
   }
}
2备注:

  • 工厂创建对象并通常提供该对象的实例。在您的代码中,更像工厂的是:

    DataModel data=dao.getDataModel()

  • 为什么要在每次调用
    start()
    时重新实例化
    InterfaceImplementation

如果您有多个
DataModel
s,那么一个有用的工厂可以通过示例为客户端创建/检索特定的
DataModel

public class DataModelFactory {

      private Interface dao = new InterfaceImplementation();

      public DataModel GetDataModelXXX() {
        DataModel dataModel = dao.getDataModelXXX();
        return dataModel ;
      }

      public DataModel GetDataModelYYY() {
        DataModel dataModel = dao.getDataModelYYY();
        return dataModel ;
      }
}

工厂旨在简化对象的创建。在创建后的工厂中,将返回对象

因此,创建Runner并将其返回给调用方。 在那里,你可以决定下一步如何处理它


为方法指定有意义的名称也很重要。

您的
工厂
类实际上不是创建模式的实现。它是模式的实现


您的
工厂
类的目的不仅是简化
运行程序
的实例化过程,而且是简化启动
运行程序
的整个过程,这使它比工厂更简单


另一方面,命名是编程中最重要的方面之一。选择有意义的域名。

我注意到的一点是:在您当前的实现中,您的客户机“有点”与所有其他活动完全分离。但不是以积极的方式

您的客户端代码调用
start()
;然后在内部,很多事情发生了。但该方法甚至没有返回值

我现在想知道:这些会如何对你的系统产生“持久”的影响?是否存在一些潜在的副作用;就像那个跑步者在某处更新某个全局状态单例一样

换句话说:给定您的代码,如果多次调用
start()
,会发生什么情况?!或零次

从这个意义上讲,我一点也不清楚这段代码与其他任何东西是如何“关联”的。对我来说,这似乎是一个你应该研究的问题

(是的,我知道我的输入更多的是一个“代码/设计审查”,而不是一个真正的答案;但见鬼,也许这会有帮助)