设计模式 用反射改进工厂模式
程序员文章站
2022-02-16 19:22:38
...
设计模式 用反射改进工厂模式
我们先写一个接口
Animal.java
package 反射工厂;
public interface Animal {
void voice();
}
在写几个实现类
Cat.java
package 反射工厂;
public class Cat implements Animal{
@Override
public void voice() {
System.out.println("miao miao miao");
}
}
Dog.java
package 反射工厂;
public class Dog implements Animal{
@Override
public void voice() {
System.out.println("wang wang wang");
}
}
Fesh.java
package 反射工厂;
public class Fesh implements Animal{
@Override
public void voice() {
System.out.println("mian mian mian");
}
}
在写工厂类
AnimalFactory .java
package 反射工厂;
public class AnimalFactory {
private AnimalFactory() {
}
@SuppressWarnings("deprecation")
public static Animal newInstance(String mm) {
Animal animal=null;
try {
Class<?> clazz = Class.forName(mm);
animal=(Animal)clazz.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return animal;
}
}
最后进行测试
package 反射工厂;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
for(int i=0;i<5;i++) {
System.out.println("请输入名称");
String s=input.next();
String sb="反射工厂."+s;
Animal animal=AnimalFactory.newInstance(sb);
animal.voice();
}
}
}
总结:
通过newInstance(String mm)传入字符串mm
我们可以得到这个类
通过Class<?> clazz = Class.forName(mm);
animal=(Animal)clazz.newInstance();
我们可以得到关于这个类的对象
然后就可以操作类里面的方法了
好处:
如果你在增加实体类,不用去工厂类里面去改动数据了。
相比于传统的工厂模式,减少了工作量。
下一篇: linux时间函数的坑