3

Documentum 示例代码从未被深入评论,所以我的问题是:

这条线是什么意思?

IDfQuery query = DfcUtils.getClientX().getQuery();
4

3 回答 3

6

您可以在 Java 中安全地将其替换为

IDfQuery query = new DfQuery();

使用工厂方法的这种方法来自旧的 Docbasic 时代,它受到 COM 可以或不能做什么的限制

于 2009-11-06T14:31:04.013 回答
5

一个老问题的答案,但原始海报问的是这条线的含义,而不是可以使用哪些替代方案。

该行从 DFCUtils 类中的静态工厂方法创建的对象实例中的工厂方法创建 IDfQuery 实现的实例。然后将该对象分配给一个变量。

所以: -

  • DfcUtils = 包含名为 getClientX() 的静态方法的类
  • getClientX() = 返回对象实例的静态工厂方法
  • getQuery() = getClientX() 返回的对象中的工厂方法,它返回一个实现 IDfQuery 的对象;
  • query = 用于引用新 IDfQuery 实例的变量

这是典型的工厂模式,其中方法/函数 getQuery() 根据规则或配置设置确定要返回的对象类型。当接口的多个实现可用时,这比创建具体类的实例更可取。通常,工厂将充当类引导程序,在将对象返回给您之前初始化属性。

本质上,您可能有一个包含条件的工厂方法,例如选择返回哪个实现的 switch 语句,称为 IOC(控制反转):-

public static IDfQuery getQuery(){
    IDfQuery returnValue;

    switch ( getDayOfWeek() ) {
        case "Monday" :  returnValue = new MondayQuery(); break;
        case "Tuesday" :  returnValue = new TuesdayQuery(); break;
        case "Wednesday" :  returnValue = new WednesdayQuery(); break;
        case "Thursday" :  returnValue = new ThursdayQuery(); break;
        case "Friday" :  returnValue = new FridayQuery(); break;
        case "Saturday" :  returnValue = new SaturdayQuery(); break;
        case "Sunday" :  returnValue = new SundayQuery(); break;
        default: returnValue = null; break;
    }

    return returnValue;
}

public static String getDayOfWeek(){
    return new SimpleDateFormat("EEEE").format( new Date() );
}
于 2012-10-16T15:35:04.993 回答
0

一个可以使用

  IDfQuery query = new DfQuery();

方法

然而,当前的 DFC 指南明确建议使用 com.documentum.com.DfClientX 工厂类来获取对象的新实例,例如 DfQuery,而不是直接调用构造函数

于 2012-08-23T11:59:10.423 回答