【Java笔记(11)】反射与工厂设计模式,动态的工厂设计模式
程序员文章站
2022-03-09 20:37:44
...
一、工厂类
工厂类是一个用于获取一类有着相同的对象实例。
反射与工厂设计模式,是用于动态的获取接口对象,不用再手动更改工厂类。
* @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();
}
/**
* 消息类实现接口 IMessage
*
* @Author Xlu
* @Date 2020-06-12 13:51
* @ClassName IMessage
* @Version 11
**/
class MyMessage implements IMessage {
public MyMessage() {
}
@Override
public void send() {
System.out.println("【消息类】xlu最帅");
}
}
/**
* 服务类实现接口 IMessage
*
* @Author Xlu
* @Date 2020-06-12 13:52
* @ClassName IMessage
* @Version 11
**/
class MyService implements IService {
public MyService() {
}
@Override
public void service() {
System.out.println("【服务类】xlu服务!");
}
}
/**
* 工厂类,用于获取接口对象
*
* @Author Xlu
* @Date 2020-06-12 13:48
* @ClassName Factory
* @Version 11
**/
class Factory {
/**
* 私有的静态方法,是工厂类的特征
*/
private Factory() {
}
/**
* 获取接口实例化对象
* @Author Xlu
* @Date 13:59 2020-06-12
* @Param className 类名称
* @Param T 泛型,接口的类型
* @return 接口实例
*/
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;
}
}
/**
* 反射与工厂设计模式
*
* @ClassName: FactoryDome
* @Author: Xlu
* @Date: 2020-06-12 13:33
* @Version 11
**/
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();
}
/**
* 消息类实现接口 IMessage
*
* @Author Xlu
* @Date 2020-06-12 13:51
* @ClassName IMessage
* @Version 11
**/
class MyMessage implements IMessage {
public MyMessage() {
}
@Override
public void send() {
System.out.println("【消息类】xlu最帅");
}
}
/**
* 服务类实现接口 IMessage
*
* @Author Xlu
* @Date 2020-06-12 13:52
* @ClassName IMessage
* @Version 11
**/
class MyService implements IService {
public MyService() {
}
@Override
public void service() {
System.out.println("【服务类】xlu服务!");
}
}
/**
* 工厂类,用于获取接口对象
*
* @Author Xlu
* @Date 2020-06-12 13:48
* @ClassName Factory
* @Version 11
**/
class Factory {
/**
* 私有的静态方法,是工厂类的特征
*/
private Factory() {
}
/**
* 获取接口实例化对象
* @Author Xlu
* @Date 13:59 2020-06-12
* @Param className 类名称
* @Param T 泛型,接口的类型
* @return 接口实例
*/
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;
}
}
/**
* 反射与工厂设计模式
*
* @ClassName: FactoryDome
* @Author: Xlu
* @Date: 2020-06-12 13:33
* @Version 11
**/
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();
}
}
下一篇: 笔记本电脑的电池无法充电
推荐阅读
-
举例讲解Python设计模式编程的代理模式与抽象工厂模式
-
java的设计模式 - 静态工厂方法
-
工厂模式 Java设计模式笔记
-
JAVA 设计模式之工厂模式学习笔记
-
java设计模式之工厂模式、静态代理模式、动态代理模式
-
Java 反射与工厂设计模式
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第22章:反射应用案例:课时102:反射与工厂设计模式
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第26章:反射与代理设计模式:课时118:动态代理设计模式
-
举例讲解Python设计模式编程的代理模式与抽象工厂模式
-
Java开发中常用的设计模式(一)---工厂模式