23种设计模式之反射与工厂设计模式

本文探讨了如何通过反射技术替换switch和if条件,利用枚举映射消除代码耦合,并介绍如何通过字符串配置动态创建实例。作者分享了Factory类实例,展示了如何利用无参构造函数和Class.forName简化实例化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所有在用简单工厂的地方,都可以考虑用反射技术来去除switch或if,解除分支判断带来的耦合
可以通过枚举类来保存switch和if的条件–》与实例类对象 的一一映射
Enum(条件,类对象xxx.class)

switch或者if是程序里的好东西,但在应对变化上,却显得老态龙钟。
反射技术的确可以很好地解决它们难以应对变化,难以维护和扩展的诟病。


使用字符串作为参数变量,使得字符串字面量可以使用配置文件动态指定


无痴迷,不成功!

package design.patterns.factory;

/**
 * 类名: factory
 * 描述:
 * 日期: 2022/6/29-11:09
 *  这是一个绝妙的类
 * @author 林建辉
 */
public class Factory {

    private Factory() {
    }

 /**
     * @param className
     *      使用字符串作为参数变量,使得字符串字面量可以使用配置文件动态指定
     *      被反射的类最好提供无参构造方法
     * @param <T>
     * @return
     */
    public static <T> T getInstance(String className) {
        T instance = null;
        try {
            instance = (T) Class.forName(className).getDeclaredConstructor().newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return instance;
    }
    
    /**
     * @param clazz
     *      具体实现子类的class对象
     *      被反射的类最好提供无参构造方法
     * @param <T>
     * @return
     */
    public static <T> T getInstance(Class<T> clazz) {
        T instance = null;
        try {
            instance = (T) Class.forName(clazz.getName()).getDeclaredConstructor().newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return instance;
    }
    
    
   public static <T> T getInstance2(Class<T> clazz) {
        T instance = null;
        try {
            instance = (T) clzz.getDeclaredConstructor().newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return instance;
    }
}

你现在多努力一分,以后老婆就多漂亮一分!
欢迎下方留言评论交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值