工厂方法模式使用反射实现
程序员文章站
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();
}
}
结果验证:
总结
利用反射就可以获得不同的对象,只需记住类名即可。
上一篇: npm 设置全局变量
下一篇: Windows实现精确计时