具有不同方法和对象设计模式的类

时间:2016-11-16 19:45:41

标签: java design-patterns

我是设计模式的新手,我不知道在这种情况下我必须申请哪些。 我在文件中有一些数据,因此我必须对该数据进行建模,然后使用该数据启动一个类。

为了读取文件和建模,我选择应用Dao模式,因此有接口(Interface)和他的实现(InterfaceImplementation)读取文件并返回模型数据(DataModel)。 在我必须使用该模型数据实例化另一个类(Runner)之后,调用其方法之一。 这就是我所做的:

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

因此客户端只调用方法new Factory().start()

我对这个解决方案有一些疑问,我不认为这是一个很好的解决方案,并且很好地应用了工厂模式。

我希望一直干净,欢呼。

4 个答案:

答案 0 :(得分:1)

您的Factory课程实际上不是 Factory 创作模式的实现。它是 Facade 模式的实现。

Factory类的目的不仅是为了简化Runner的实例化过程,而且是为了简化启动Runner的整个过程,使其不仅仅是工厂。< / p>

另一方面,命名事物是编程中最重要的方面之一。选择您域名Ubiquitous Language的有意义的名称。

答案 1 :(得分:0)

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();

  • 为什么在每次InterfaceImplementation来电时重新实例化start()

如果您有多个DataModel,有用的工厂可以为客户创建/检索特定的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 ;
      }
}

答案 2 :(得分:0)

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

因此,创建Runner并将其返回给调用者。 在那里,您可以决定接下来该怎么做。

为方法赋予有意义的名称也很重要。

答案 3 :(得分:0)

引起我注意的是:在你目前的实施中,你的客户是&#34;有点&#34;完全脱离所有其他活动。但不是积极的方式。

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

我现在想知道:这将是一个什么样的&#34;持久的&#34;对你的系统有影响?是否有一些隐含的副作用;就像那个Runner在某个地方更新了一些全局状态单身?

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

从这个意义上来说,我并不清楚这段代码是如何与#34;相关的。其他任何事情。好吧,对我来说,这应该是一个问题。

(是的,我知道我的输入更像是一个&#34;代码/设计评论&#34;而不是真正的答案;但是,哎呀,也许它会有所帮助)