一、工厂类
工厂类是一个用于获取一类有着相同的对象实例。
反射与工厂设计模式,是用于动态的获取接口对象,不用再手动更改工厂类。
* @Param className 类名称
* @Param T 泛型,接口的类型
* @return 接口实例
二、反射
不再使用new关键字获取实例对象
1.9之后使用
instance=Class.forName(className).getConstructor().newInstance();
获取对象实例
getDeclaredConstructor(Class<?>... parameterTypes)
这个方法会返回制定参数类型的所有构造器,包括public的和非public的,当然也包括private的。
getConstructor(Class<?>... parameterTypes)
这个方法返回的是上面那个方法返回结果的子集,只返回制定参数类型访问权限是public的构造器。
三、分块代码
interface IMessage {
public void send();
}
interface IService {
public void service();
}
class MyMessage implements IMessage {
public MyMessage() {
}
@Override
public void send() {
System.out.println("【消息类】xlu最帅");
}
}
class MyService implements IService {
public MyService() {
}
@Override
public void service() {
System.out.println("【服务类】xlu服务!");
}
}
class Factory {
private Factory() {
}
public static <T> T getInstance(String className , Class<T> clazz) {
T instance=null;
try {
instance = (T) Class.forName(className).getDeclaredConstructor().newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return instance;
}
}
public class FactoryDome {
public static void main(String[] args) {
IMessage message = Factory.getInstance("reflect.MyMessage" , IMessage.class);
IService service = Factory.getInstance("reflect.MyService" , IService.class);
service.service();
message.send();
}
}
四、完整代码
package reflect;
interface IMessage {
public void send();
}
interface IService {
public void service();
}
class MyMessage implements IMessage {
public MyMessage() {
}
@Override
public void send() {
System.out.println("【消息类】xlu最帅");
}
}
class MyService implements IService {
public MyService() {
}
@Override
public void service() {
System.out.println("【服务类】xlu服务!");
}
}
class Factory {
private Factory() {
}
public static <T> T getInstance(String className , Class<T> clazz) {
T instance=null;
try {
instance = (T) Class.forName(className).getDeclaredConstructor().newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return instance;
}
}
public class FactoryDome {
public static void main(String[] args) {
IMessage message = Factory.getInstance("reflect.MyMessage" , IMessage.class);
IService service = Factory.getInstance("reflect.MyService" , IService.class);
service.service();
message.send();
}
}