Как применить фабричный метод в данном случае?
У меня есть два метода:
public interface IReader
{
public Task<UserSettings> Read();
}
public interface IWriter
{
public SettingState Write(ISetting setting, long id);
}
public class SettingWriter : IWriter
{
public SettingState Write(ISetting setting, long id)
{
//do something
}
}
public class SettingReader : IReader
{
public Task<UserSettings> Read()
{
//do something
}
}
Эти методы считываю настройки из БД или записывают. Я хочу их обьединить в фабрику методов.
public abstract class SettingFactory
{
public abstract IWriter Write();
public abstract IReader Read();
}
Так же у меня есть три наследника класса ISetting, который в зависимости от типа будут создать свой экземпляр методов Reader и Writer.
public class SettingNotebook: SettingFactory
{
public override IWriter Write()
{
//do something
}
public override IReader Read()
{
//do something
}
}
Но есть нюанс - Writer одинаковый функционал для всех, а Reader - нет. Как правильно это можно сделать, чтобы Writer не копировать в реализации фабрики каждый раз, а Reader переопределять?
Ответы (2 шт):
Я бы создал базовый класс BaseSettingFactory:SettingFactory и в нем определил реализацию Writer. Соответственно, все SettingNotebook и подобные наследовались бы от BaseSettingFactory.
Как вариант можно реализовать метод Write() в родительский класс SettingFactory:
public abstract class SettingFactory
{
public IWriter Write()
{
// do something
}
public abstract IReader Read();
}
А потом отдельно на каждый наследуемый класс указать Read():
public class SettingNotebook: SettingFactory
{
public override IReader Read()
{
//do something
}
}
public class Setting2: SettingFactory
{
public override IReader Read()
{
//do something
}
}
public class Setting3: SettingFactory
{
public override IReader Read()
{
//do something
}
}