Как добиться полиморфизма с инверсией шаблона управления в java - PullRequest
0 голосов
/ 31 января 2020

Мне показалось полезным инверсию управления, поскольку она устраняет жесткую связь между двумя объектами. Но не уверен, как мы можем достичь полиморфизма одновременно. Например, я прошел статью Io C и Inpendency Injection . В этом примере кода приведено приложение, в котором перечислены фильмы. Ниже приведен фрагмент кода приложения перечисления mov ie, использующего шаблон внедрения зависимостей через java bean: -

**class MovieLister{
   private MovieFinder finder;
   public void setFinder(MovieFinder finder) {
      this.finder = finder;
   }
   public Movie[] moviesDirectedBy(String arg) {
      List allMovies = finder.findAll();
      for (Iterator it = allMovies.iterator(); it.hasNext();) {
          Movie movie = (Movie) it.next();
          if (!movie.getDirector().equals(arg)) it.remove();
      }
      return (Movie[]) allMovies.toArray(new Movie[allMovies.size()]);
  }
}

public interface MovieFinder {
    List findAll();
}

class TextFileMovieFinder implements MovieFinder{
   //Pass text file containing movie detail in appropriate format
   public void setFilename(String filename) {
      this.filename = filename;
  }
  public List findAll(){
         //implementaion
  }
}


class XMLFileMovieFinder implements MovieFinder{
   //Pass xml file containing movie detail in appropriate format
   public void setFilename(String filename) {
      this.filename = filename;
  }
  public List findAll(){
         //implementaion
  }
}

<beans>
    <bean id="MovieLister" class="spring.MovieLister">
        <property name="finder">
            <ref local="MovieFinder"/>
        </property>
    </bean>
    <bean id="MovieFinder" class="spring.TextFileMovieFinder">
        <property name="filename">
            <value>movies1.txt</value>
        </property>
    </bean>
</beans>**

Хорошая особенность этого подхода в том, что он не связан с реализацией MovieFinder и мы можем настроить любой MovieFinder в файле Bean и запустить приложение. Но здесь я сталкиваюсь с ограничением: это приложение может использоваться только для одного формата файла (текстового файла или XML файла) одновременно. Можем ли мы также достичь полиморфизма во время выполнения, чтобы пользователь мог свободно передавать фильмы в любом типе файла (текст / xml).

С уважением, Nite sh

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...