编程自学指南:java程序设计开发,扎实的java编程基础-反射之反射与设计模式结合学习笔记,反射(Reflection)是 Java 在运行时动态获取类信息、创建对象、调用方法的能力。

java程序设计开发,扎实的java编程基础-反射之反射与设计模式结合学习笔记,反射(Reflection)是 Java 在运行时动态获取类信息、创建对象、调用方法的能力。

Java 反射与设计模式结合学习笔记

一、反射在设计模式中的核心价值

反射(Reflection)是 Java 在运行时动态获取类信息、创建对象、调用方法的能力。与设计模式结合时,反射能:

  • 增强动态性:无需硬编码类名,通过配置或注解动态加载类(如工厂模式、策略模式)。
  • 实现通用逻辑:编写与具体类无关的代码(如代理模式、观察者模式)。
  • 突破封装限制:访问私有成员(如单例模式中反射破坏封装的问题)。
二、反射与工厂模式(Factory Pattern)
场景:动态创建对象(解耦客户端与具体类)

传统工厂模式需为每个子类编写工厂方法,反射可实现 “通用工厂”,根据类名动态创建对象。

案例:通用对象工厂(支持配置文件)
  1. 定义产品接口
    interface Product {  
        void use();  
    }  
    
  2. 具体产品类
    class ConcreteProductA implements Product {  
        @Override public void use() { System.out.println("使用ProductA"); }  
    }  
    class ConcreteProductB implements Product {  
        @Override public void use() { System.out.println("使用ProductB"); }  
    }  
    
  3. 反射实现通用工厂
    import java.util.Properties;  
    import java.lang.reflect.Constructor;  
    
    public class ReflectiveFactory {  
        private static final Properties CONFIG = new Properties();  
        static {  
            try {  
                CONFIG.load(ReflectiveFactory.class.getResourceAsStream("/config.properties"));  
            } catch (Exception e) {  
                throw new RuntimeException("加载配置失败", e);  
            }  
        }  
    
        // 根据类型标识动态创建产品  
        public static Product createProduct(String type) throws Exception {  
            String className = CONFIG.getProperty(type);  
            Class<?> clazz = Class.forName(className);  
            Constructor<?> constructor = clazz.getDeclaredConstructor();  
            return (Product) constructor.newInstance();  
        }  
    }  
    
  4. 配置文件(config.properties)
    productA=com.example.ConcreteProductA  
    productB=com.example.ConcreteProductB  
    
  5. 客户端调用
    Product product = ReflectiveFactory.createProduct("productA");  
    product.use(); // 输出:使用ProductA  
    
解析
  • 反射作用:通过Class.forName和构造器反射,工厂无需知晓具体产品类,只需读取配置即可创建对象,符合开闭原则。
  • 优势:新增产品时只需修改配置文件,无需修改工厂代码,解耦客户端与产品实现。
三、反射与单例模式(Singleton Pattern)
场景:反射破坏单例及防御

反射可通过调用私有构造器创建多个单例实例,需额外逻辑防御。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zl515035644

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值