package object;
/**
* @author dayu
* @date 2019/03/05
* @Describe 通过反射类改进工厂的设计模式可以最大的改进子类的操作,通过new造成耦合问题 ...工厂类使用泛型可以变成高可用的状态
*/
public class FactoryDemo {
public static void main(String[] args) {
// IFruit fruit = new Orange();
IFruit fruit = Factory.getInstance("object.Banana");
fruit.eat();
IMessage msg = Factory.getInstance("object.Msgs");
msg.print();
}
}
interface IFruit {
void eat();
}
interface IMessage {
void print();
}
class Msgs implements IMessage {
@Override
public void print() {
System.out.println("Msgs.print()");
}
}
class Orange implements IFruit {
@Override
public void eat() {
System.out.println(this.getClass().getName() + " 吃橘子");
}
}
class Apple implements IFruit {
@Override
public void eat() {
System.out.println(this.getClass().getName() + " 吃苹果");
}
}
class Banana implements IFruit {
@Override
public void eat() {
System.out.println(this.getClass().getName() + " 吃香蕉");
}
}
/**
* 工厂类使用泛型可以变成高可用的状态
*/
class Factory {
private Factory() {}
@SuppressWarnings("unchecked")
public static <T> T getInstance(String className) {
T obj = null;
try {
obj = (T)Class.forName(className).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
}