Скажем, у меня есть интерфейс Java Blender.java
с различными реализациями Cuisinart.java
, Oster.java
, Blendtec.java
и т. д. Теперь я хочу написать такую программу:
public class Blendifier {
// ...
public static void main(String... args) {
Blender blender = new Cuisinart();
blender.blend();
}
}
Но теперь, если я хочу использовать Blendtec
вместо Cuisinart
, мне нужно открыть исходный код, изменить код и перекомпилировать.
Вместо этого я хотел бы иметь возможность указать, какой Blender
использовать на лету при запуске программы, написав имя класса, которое я хочу, в качестве аргумента командной строки.
Но как перейти от строки, содержащей имя класса, к созданию фактического экземпляра этого класса?
.properties
для сопоставления имен разрешений с реализующими классами; мой «HtmlRenderer» просматривает настроенный пакет, чтобы увидеть, есть ли класс<Something>Renderer
для любого тега, найденного во входных данных, например.<pre>
находится во входных данных, он ищет классPreRenderer
в пакете, указанном при создании экземпляра «HtmlRenderer». Нет модифицирующего кода для добавления новогоcase
илиif
при добавлении блендера новой марки. - person Stephen P   schedule 22.04.2014