не знаю как правильно написать условие в цикле while, что бы читал все подряд до тех пор пока не встретит что-то отличное от "soapOpera", "cartoon", "thriller". если записать так
while (true){
            if(key=(reader.readLine().equals("soapOpera")||(key.equals("cartoon"))||(key.equals("thriller")))){
                movie = MovieFactory.getMovie(key);
                System.out.println(movie.getClass().getSimpleName());
            }else{
                MovieFactory.getMovie(key);
                break;
           }
то будет ругаться на if, так как должно быть булеево выражение. А если сделать его булеевым, то надо инициализировать переменную key