【问题标题】:Is that an object factory? [closed]那是一个对象工厂吗? [关闭]
【发布时间】:2015-06-02 10:57:59
【问题描述】:

我有以下课程:

public class Report{
   //contains some data fields
}

public class ReportFactory{

    //The fields below are in fact restrictions
    private List<Integer> idList;
    private OrderProperty property;
    private Integer amount;
    //ad so forth

    //GET, SET

    public Report getReport(){
         Report report = new Report;
         //Getting report depending on which of those fields were setted
         return report;
    }
}

我的问题是说ReportFactory 实际上是一个对象工厂是否正确。会不会误导试图理解代码的开发者?

【问题讨论】:

  • 为什么不只是“报告工厂”?
  • @MarounMaroun 你是什么意思?
  • 我的意思是为什么称它为“对象工厂”而不仅仅是...“报告工厂”?
  • 您的问题到底是什么? ReportFactory 看起来像是创建报告的东西,所以是的,它是一个工厂类。由于报告是对象,是的,您可以将其称为“对象工厂”。 “对象工厂”这个词并没有什么特别之处。我会调用方法createReport() 而不是getReport()
  • @user3663882 限制的目的是什么。它们如何影响报表对象的创建?

标签: java factory


【解决方案1】:

由于您正在使用方法生成 Report 类的实例,因此它定义为工厂模式,是的。

无论如何,通常在工厂模式中,用于描述您希望生成的实例的限制或参数是使用方法参数而不是字段直接传递的。

【讨论】:

    【解决方案2】:

    是的,可以公平地说ReportFactory.getReport() 是创建Report 类实例的工厂方法,开发人员应该明白这一点。但是,您可以阅读更多内容以获得更好的工厂模式实现。

    【讨论】:

    • 更好的工厂实现是什么意思?
    【解决方案3】:

    这是正确的。

    其实对象工厂到底是什么意思,它应该根据对象的类型来初始化对象,并返回对应的对象引用。

    例如,如果Shape是一个对象工厂,那么Shape类中的get()方法应该初始化Rectangle、Square、Triangle等形状,并根据用户需求返回对应的实例。

    如果您的 ReportFactory 类根据 getReport() 方法中的用户参数初始化并返回不同类型的报表对象,那么是的,您的 ReportFactory 类就是对象工厂。

    【讨论】:

    • 创建特定子类实例的整个业务并不是必要将其称为工厂——这只是实现工厂的一种可能方式。 “工厂”只是意味着工厂的主要职责是创建某种类型的对象,在本例中为 Report 对象。工厂内部的具体运作方式并不影响您是否可以称其为“工厂”。
    猜你喜欢
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多