2016-02-13 3 views
1

Предполагая, что у меня есть очень простой случай полиморфизма. Как динамически установить, какой класс будет запускаться во время выполнения?генерировать класс во время выполнения на основе логики java

например:

public interface Car { 
     abstract String carName(); 
} 

public class BMW implements Car{ 
    String carlogic(){ 
     // logic 
    } 
} 


public class Audi implements Car{ 
    String carLogic(){ 
     //logic 
    } 
} 

Во время выполнения, я получаю строку, которая является именем автомобиля. Например. «Audi», «Bmw» и т. Д. Если я получу «Audi», я хочу назвать Audi.carLogic и «BMW» BMW.carLogic. Теперь простой способ - создать это с помощью коммутационных шкафов, но это кажется довольно грязным? Я знаю, что это также можно сделать с помощью отражений. Но с целью изучения, как бы вы к этому подошли?

ответ

2

В «формальном» приложении я использую аннотацию Spring и @Qualifier, чтобы выбрать правильный класс реализации. Это много раздуваться, чтобы добавить только тестовый пример или простое приложение.

Без использования рамки вы хотели бы использовать шаблон Factory или аналогичный шаблон. Хороший пример того, что близко соответствует вашему сценарию автомобиля можно найти здесь:

http://howtodoinjava.com/design-patterns/creational/implementing-factory-design-pattern-in-java/

Наконец, потому что вы, кажется, предваряя класс реализации автомобиля, чтобы соответствовать входной строке, отражение в заводе не плохой выбор , (P.S., используя Groovy вместо Java, сделает это еще проще).

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