欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

工厂方法模式使用反射实现

程序员文章站 2024-01-24 09:03:40
...


前言

工厂模式这是一种常见的方法,需要哪个产品就生产哪一个,利用反射的方法可以更加简洁的来实现。只需在工厂方法中传入一个Class类来决定生产哪种产品类


一、设计Product接口

只是用来测试,所以只实现一个方法method()

public interface IProduct {
    void method();
}

二、设计两个产品接口的实现类

ProductA

public class ProductA implements IProduct {

    @Override
    public void method() {
        System.out.println("I am ProductA");
    }
}

ProductB

public class ProductB implements IProduct {
    @Override
    public void method() {
        System.out.println("I am ProductB");
    }
}

三,设计一个工厂抽象类

使用泛型,用户只需传入IProduct的子类Class,就可获得该Class的对象

public abstract class Factory {
    public abstract <T extends IProduct> T createProduct(Class<T> clz);
}

四,实现一个工厂抽象类

public class ConcreteFactory extends Factory {
    private ConcreteFactory() {

    }

    public static ConcreteFactory getInstance() {
        return FactoryHolder.INSTANCE;
    }

    @Override
    public <T extends IProduct> T createProduct(Class<T> clz) {
        IProduct product = null;
        try {
            product = (IProduct) Class.forName(clz.getName()).newInstance();
        } catch (InstantiationException | ClassNotFoundException | IllegalAccessException e) {
            e.printStackTrace();
        }
        return (T) product;
    }

    private static class FactoryHolder {
        private static final ConcreteFactory INSTANCE = new ConcreteFactory();
    }
}

五,测试

public class Test {
    public static void main(String[] args) {
        IProduct product = ConcreteFactory.getInstance().createProduct(ProductA.class);
        product.method();
        IProduct product1 = ConcreteFactory.getInstance().createProduct(ProductB.class);
        product1.method();
    }
}

结果验证:
工厂方法模式使用反射实现

总结

利用反射就可以获得不同的对象,只需记住类名即可。