我在浏览SO中的“工厂方法”页面时,偶然发现了这个link。和this comment。该示例看起来像是一个变体,并以其原始的方式实现:将实例化推迟到子类...
这是我的尝试。下面的代码是否实现了链接中指定的示例的工厂模式?请验证并建议是否需要进行任何重构。
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;
}
}发布于 2010-04-18 04:15:32
我会说这是可以的,尽管在我看来过于复杂。您并不真正需要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;
}}
你可能想要包括一个“默认”的情况。
https://stackoverflow.com/questions/2659690
复制相似问题