Java 工厂方法实现
我在浏览SO中的“工厂方法”页面时遇到了这个问题。 和。该示例看起来是一个变体,并考虑以其原始方式实现:将实例化延迟到子类 这是我的尝试。下面的代码是否实现了链接中指定的示例的工厂模式?请验证并建议是否必须进行任何重新分解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() {
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的“工厂方法”。(我发现了这个和那个问题,因为我也在努力更好地理解真正的工厂方法)