public void GetResult() { _firstClass.SomeMethod11(); _firstClass.SomeMethod12(); _secondClass.SomeMethod21(); _secondClass.SomeMethod22(); _thirdClass.SomeMethod31(); _thirdClass.SomeMethod32(); }
//А здесь абстрактно представлена вся реализация. //Соответственно, запилив конкретную фабрику, реализующую интерфейс IFactory //и возвращающую конкретный типы, реализующие интерфейсы IFirstItem, ISecondItem, IThirdItem //можно подавать ее в конструктор класса Client и все будет прекрасно работать //без изменения класса Client, т.е. без изменения реализации метода Run() //т.е. результат выполнения метода Run() будет зависить от конкретной фабрики, //получается мы изменяем результат без изменения поведения. public void Run() { _firstItem.SomeMethod11(); _firstItem.SomeMethod12(); _secondItem.SomeMethod21(); _secondItem.SomeMethod22(); _thirdItem.SomeMethod31(); _thirdItem.SomeMethod32(); }