java 使用反射创建工厂模式

什么是工厂模式

      工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。当我们定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

      这样做的好处就是将创建实例的工作与使用实例的工作分开,使用者不必关心类对象如何创建,明确了职责。并且扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。

写法

步骤 1: 定义一个’果汁’接口

/**
 * 创建果汁接口
 * @author Evan
 */
public interface Juice {

    /**
     * 生产果汁方法
     */
    void produce();
}

步骤 2: 创建’苹果汁’类,实现’果汁’接口

/**
 * 创建苹果汁类,实现果汁接口
 * @author Evan
 */
public class AppleJuice implements Juice {

    /**
     * 实现生产果汁的方法
     * @author Evan
     */
    @Override
    public void produce() {
        System.out.println("生产苹果汁");
    }
}

步骤 3: 创建’橙汁’类,实现’果汁’接口

/**
 * 创建橙汁类,实现果汁接口
 * @author Evan
 */
public class OrangeJuice implements Juice {
    @Override
    public void produce() {
        System.out.println("生产橙汁");
    }
}

步骤 4: 创建’果汁’工厂类

/**
 * 3.创建果汁工厂
 * @author Evan
 */
public class JuiceFactory {

    /**
     * 根据不同的水果生产不同的果汁
     *
     * @param clazz 果汁的具体类型
     * @param <T>   泛型
     * @return 实例
     */
    public static <T> T getJuice(Class<? extends T> clazz) {
        T obj = null;
        try {
            // 反射生成具体实例
            obj = (T) Class.forName(clazz.getName()).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        return obj;
    }
}

测试一下

/**
 * 测试工厂类
 * @author Evan
 */
public class FactoryTest {
    public static void main(String[] args) {
        // 工厂生成苹果汁实例
        AppleJuice appleJuice = JuiceFactory.getJuice(AppleJuice.class);
        // 工厂生产橙汁实例
        OrangeJuice juice = JuiceFactory.getJuice(OrangeJuice.class);
        // 生产苹果汁
        appleJuice.produce();
        // 生产橙汁
        juice.produce();

    }
}

输出结果

生产苹果汁
生产橙汁

Process finished with exit code 0
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值