我是设计模式的新手,我不知道在这种情况下我必须申请哪些。 我在文件中有一些数据,因此我必须对该数据进行建模,然后使用该数据启动一个类。
为了读取文件和建模,我选择应用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()
。
我对这个解决方案有一些疑问,我不认为这是一个很好的解决方案,并且很好地应用了工厂模式。
我希望一直干净,欢呼。
答案 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;而不是真正的答案;但是,哎呀,也许它会有所帮助)