Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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_Factory Pattern_Factory Method - Fatal编程技术网

Java 工厂方法实现

Java 工厂方法实现,java,design-patterns,factory-pattern,factory-method,Java,Design Patterns,Factory Pattern,Factory Method,我在浏览SO中的“工厂方法”页面时遇到了这个问题。 和。该示例看起来是一个变体,并考虑以其原始方式实现:将实例化延迟到子类 这是我的尝试。下面的代码是否实现了链接中指定的示例的工厂模式?请验证并建议是否必须进行任何重新分解 public class ScheduleTypeFactoryImpl implements ScheduleTypeFactory { @Override public IScheduleItem createLinearScheduleItem() {

我在浏览SO中的“工厂方法”页面时遇到了这个问题。 和。该示例看起来是一个变体,并考虑以其原始方式实现:将实例化延迟到子类

这是我的尝试。下面的代码是否实现了链接中指定的示例的工厂模式?请验证并建议是否必须进行任何重新分解

public class ScheduleTypeFactoryImpl implements ScheduleTypeFactory {

    @Override
    public IScheduleItem createLinearScheduleItem() {
            return new LinearScheduleItem();
    }

    @Override
    public IScheduleItem createVODScheduleItem() {
     return new VODScheduleItem();
    }

}

public class UseScheduleTypeFactory {

    public enum ScheduleTypeEnum {
        CableOnDemandScheduleTypeID, 
            BroadbandScheduleTypeID, 
            LinearCableScheduleTypeID, 
            MobileLinearScheduleTypeID
    }

    public static IScheduleItem getScheduleItem(ScheduleTypeEnum scheduleType) {
        IScheduleItem scheduleItem = null;
        ScheduleTypeFactory scheduleTypeFactory = new ScheduleTypeFactoryImpl();
        switch (scheduleType) {
        case CableOnDemandScheduleTypeID:
            scheduleItem = scheduleTypeFactory.createVODScheduleItem();
            break;

        case BroadbandScheduleTypeID:
            scheduleItem = scheduleTypeFactory.createVODScheduleItem();
            break;

        case LinearCableScheduleTypeID:
            scheduleItem = scheduleTypeFactory.createLinearScheduleItem();
            break;

        case MobileLinearScheduleTypeID:
            scheduleItem = scheduleTypeFactory.createLinearScheduleItem();
            break;
        default:
            break;
        }
        return scheduleItem;
    }
}

我想说这没关系,不过我觉得太复杂了。您实际上不需要
ScheduleTypeFactoryImpl
类。然后可以将
UseScheduleTypeFactory
类更改为仅
ScheduleTypeFactory

我想的是:

公共类ScheduleTypeFactory{

public enum ScheduleTypeEnum {
    CableOnDemandScheduleTypeID, 
        BroadbandScheduleTypeID, 
        LinearCableScheduleTypeID, 
        MobileLinearScheduleTypeID
}

public static IScheduleItem getScheduleItem(ScheduleTypeEnum scheduleType) {
    IScheduleItem scheduleItem = null;
    switch (scheduleType) {
    case CableOnDemandScheduleTypeID:
        scheduleItem = new VODScheduleItem();
        break;

    case BroadbandScheduleTypeID:
        scheduleItem = new VODScheduleItem();
        break;

    case LinearCableScheduleTypeID:
        scheduleItem = new LinearScheduleItem();
        break;
    case MobileLinearScheduleTypeID:
        scheduleItem = new LinearScheduleItem();
        break;
    default:
        break;
    }
    return scheduleItem;
}
}

您可能希望包含一个“默认”案例。

这不是
工厂方法
模式;这正是本文的原始作者所使用的模式。这个问题的答案表明它是一个
简单的工厂
,而不是GoF的“工厂方法”。(我发现了这个和那个问题,因为我也在努力更好地理解真正的工厂方法)