Итак, у нас был интерфейс, который существует уже давно. Давайте назовем это IFoo
. В нем определено много методов, и его реализуют около 10 классов.
Все время, когда нам нужно было создать экземпляр одного из этих классов, мы использовали простой шаблон фабрики:
IFoo foo = FooFactory.Create(...);
Тогда, конечно, у нас есть доступ ко всем методам, определенным в IFoo:
foo.Method1();
foo.Method2();
etc.
Но теперь у нас есть некоторые методы, которые должны быть в некоторых из десяти классов, но не во всех. Таким образом, в соответствии с принципом разделения интерфейсов, я понимаю, что мы должны создать новый интерфейс: IBar
.
Так что классы, которым нужны методы, которые будут определены в IBar, будут выглядеть так:
public class something: IFoo, IBar
{
...
}
Пока все хорошо. Но я не уверен, как получить доступ к этим методам. Потому что, когда мы используем тот же метод фабрики:
IFoo foo = FooFactory.Create(...);
foo
не имеет методов из IBar
.
Фабричный метод выглядит следующим образом (это упрощенная версия, чтобы упростить этот пост):
public static IFoo Create(string className)
{
Type type = Type.GetType(className);
return (IFoo)Activator.CreateInstance(type);
}
Так или иначе, мне неясно, как изменить все это, чтобы иметь доступ и к методам в IBar
.