2013-07-10 8 views
0

Я довольно новичок в принципах SOLID, и я обнаружил, что часто прихожу к следующей ситуации.Как заполнить список интерфейсов?

У меня есть реализация задачи, привязанной к интерфейсу, когда мне нужно использовать класс, я просто использую DI для такого интерфейса.

Моя проблема заключается в том, что делать, когда мне нужно несколько реализаций, например.

List<IDataSource> dataSources = new ArrayList<IDataSource>(); 
dataSources.add(new DataSourceOne()); 
dataSources.add(new DataSourceTwo()); 
.... and so one... 

, а затем я перейду через массив к действию метода интерфейса для каждой реализации.

Это плохая практика? есть ли способ заполнения списка без нового ключевого слова? например, C# отражение. или шаблон проектирования, который позволяет избежать этого?

ответ

1

Что у вас есть против ключевого слова new, если вы хотите создать новый объект?

Вы можете упростить код, как:

List<DataSource> dataSources = Array.asList(
    new DataSourceOne(), 
    new DataSourceTwo(), 
    ... 
); 

Хотя он имеет некоторые виды использования, с помощью отражения почти всегда очень плохая идея.

+0

Это было частью моего вопроса, действительно ли делает это для SOLID? – Lunar

+0

@ Lunar Я думаю, что это «ортогональная проблема». Вы можете создать список, прежде чем наделять его конструктором объектом, который будет его использовать. –

Смежные вопросы