Если вам нужно только изучить фабричный шаблон с помощью отражения, простое решение состоит в том, что просто скопируйте приведенный ниже код в файл TestReflectionFactoryDesign.java
с вашим любимым текстовым редактором и перейдите по пути, в котором вы его сохранили, и запустите * 1002.* а затем java TestReflectionFactoryDesign
, чтобы увидеть результат.
public class TestReflectionFactoryDesign {
public static void main(String[] args) throws Exception {
Person student = PersonFactory.getPersonWithFullQualifiedClassName("Student");
student.say();
Person teacher = PersonFactory.getPersonWithClass(Teacher.class);
teacher.say();
Person student2 = PersonFactory.getPersonWithName("student");
student2.say();
}
}
class Student implements Person {
@Override
public void say() {
System.out.println("I am a student");
}
}
class Teacher implements Person {
@Override
public void say() {
System.out.println("I am a teacher");
}
}
interface Person {
void say();
}
class PersonFactory {
// reflection, by full qualified class name
public static Person getPersonWithFullQualifiedClassName(String personType) throws Exception {
Class<?> personClass = Class.forName(personType);
return getPersonWithClass(personClass);
}
// reflection, by passing class object
public static Person getPersonWithClass(Class personClass) throws Exception {
return (Person) personClass.newInstance();
}
// no reflection, the ordinary way
public static Person getPersonWithName(String personType) {
if (personType.equalsIgnoreCase("STUDENT")) {
return new Student();
} else if (personType.equalsIgnoreCase("TEACHER")) {
return new Teacher();
}
return null;
}
}
Если вы находитесь в IDE и не хотите менять свой код, вы должны поставить package com.test.TestReflectionFactoryDesign
в самом начале кода., который должен быть путем, где вы создали свой файл Java.