Factory Execution Method

I was browsing Factory Method pages in SO and came across this link. And this comment . The example looked like an option and was supposed to be implemented in its own way: defer the instance to subclasses ...

Here is my attempt. Is the following code implementing the Factory pattern of the example specified in the link? Please acknowledge and suggest if this should pass any re-factoring.

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;
    }
}
+3
source share
1 answer

I would say that everything is in order, although, in my opinion, it is too complicated. You do not need a class ScheduleTypeFactoryImpl. Then you can change the class UseScheduleTypeFactoryonly to 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;
}

}

" ".

+1

Source: https://habr.com/ru/post/1741599/


All Articles