Реализация метода фабрики - PullRequest
3 голосов
/ 17 апреля 2010

Я просматривал страницы «Заводской метод» в SO и наткнулся на эту ссылку . И этот комментарий . Пример выглядел как вариант и предполагал реализовать его оригинальным способом: отложить создание экземпляров для подклассов ...

Вот моя попытка. В следующем коде реализован шаблон Factory примера, указанного в ссылке? Пожалуйста, подтвердите и предложите, если это должно быть подвергнуто ре-факторингу.

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;
    }
}

1 Ответ

1 голос
/ 18 апреля 2010

Я бы сказал, что все в порядке, хотя, на мой взгляд, слишком сложно. Вам действительно не нужен класс 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;
}

}

И вы можете включить регистр по умолчанию.

...