Информация об изменениях

Сообщение Re[3]: Абстрактная фабрика и дженерики от 20.08.2019 14:13

Изменено 20.08.2019 14:16 ·

Re[3]: Абстрактная фабрика и дженерики
Здравствуйте, Kaifa, Вы писали:

K>вопрос вдогонку. допустим среди устройств есть зарядник устройства, у которого метод создания имеет обязательный параметр — длина кабеля.

Как я понимаю, как правило суть фабрики в том, чтобы абстрагироваться от способа создания объектов и их зависимостей. Поэтому как правило длина кабеля будет параметром (или константой) фабрики:
public ModernAppleDevicesFactory
{
    private ICellPhone theOnlyTruePhone = new IPhone();
    private int cableLength;

    public AppleDevicesFactory(int cableLength) {this.cableLength = cableLength;}

    public ICellPhone CreateCellPhone()
    {
        return theOnlyTruePhone;
    }

    public ICharger CreateCharger()
    {
        return new MadeInChinaCharger(this.cableLength);
    }

    public ILaptop CreateLaptop()
    {
        return new LaptopApple(DisplayType.RETINA);
    }
}

Клиенты теперь могут не париться с выбором длины, модели, етс, фабрика полностью отвечает за выбор параметров конструктора и экземпляров.
Параметризированные методы Create* это более сложный случай и в целом да, нужно если разные типы имеют один и тот же параметр.
Ещё фабрики могут быть полезны, если надо делать выбор о том, что создавать новый объект или брать существующий.

K>как это лучше реализовывать? наряду к абстрактному интерфейсу IAbstractDeviceFactoryMethod должен появиться такой же в общем-то независимый IAbstractChargerDeviceFactoryMethod?

K>или как это лучше вписать?
Ну если применить ISP, то так оно и выйдет.

А генерики непонятно тут накой. Их надо использовать только если очень надо.
Re[3]: Абстрактная фабрика и дженерики
Здравствуйте, Kaifa, Вы писали:

K>вопрос вдогонку. допустим среди устройств есть зарядник устройства, у которого метод создания имеет обязательный параметр — длина кабеля.

Как я понимаю, как правило суть фабрики в том, чтобы абстрагироваться от способа создания объектов и их зависимостей. Поэтому как правило длина кабеля будет параметром (или константой) фабрики:
public ModernAppleDevicesFactory
{
    private ICellPhone theOnlyTruePhone = new IPhone();
    private int cableLength;

    public ModernAppleDevicesFactory(int cableLength) {this.cableLength = cableLength;}

    public ICellPhone CreateCellPhone()
    {
        return theOnlyTruePhone;
    }

    public ICharger CreateCharger()
    {
        return new MadeInChinaCharger(this.cableLength);
    }

    public ILaptop CreateLaptop()
    {
        return new LaptopApple(DisplayType.RETINA);
    }
}

Клиенты теперь могут не париться с выбором длины, модели, етс, фабрика полностью отвечает за выбор параметров конструктора и экземпляров.
Параметризированные методы Create* это более сложный случай и в целом да, нужно если разные типы имеют один и тот же параметр.
Ещё фабрики могут быть полезны, если надо делать выбор о том, что создавать новый объект или брать существующий.

K>как это лучше реализовывать? наряду к абстрактному интерфейсу IAbstractDeviceFactoryMethod должен появиться такой же в общем-то независимый IAbstractChargerDeviceFactoryMethod?

K>или как это лучше вписать?
Ну если применить ISP, то так оно и выйдет.

А генерики непонятно тут накой. Их надо использовать только если очень надо.