工厂模式三
工厂模式三
demo3:
下面可以看到修改后的factory以后扩充类时不用修改即可
新的问题:
* 在项目中可能用几十个类同时实现了一个接口,用户是如何知道已有的接口子类呢?
* 我们 可以用代号-->子类的包.类名称,我们通过代号去访问,再给用户一个文件列表给用户列出全部的代码--子类的映射
Code
class Factory {
public static Fruit getFruitInstance(String type) {
Fruit f = null;
//通过Class类来完成 通过包名和类名来实例化这个类
//这个方法返回的是object需要一个转型
try {
f=(Fruit)Class.forName("com.miao.factoryDemo3"+type).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return f;
}
}
public class factoryDemo3 {
public static void main(String args[]) {
// 以下是以前紧密耦合的工厂使用方法,子类与父类紧紧结合
/**
* Fruit f=new Apple(); f.grow(); f.pick();
*/
// //////////////////////////////
/**
* //下面用上面的类Factory来实现 Fruit f=Factory.getFruitInstance(); f.grow();
* f.pick(); /////////////////////////////
*/
// demo2 中对其进行修改
if (args.length == 0) {
System.out.println("请输入要使用的类名称:");
System.exit(1);
}
Fruit f = Factory.getFruitInstance(args[0]);
if (f != null) {
f.grow();
f.pick();
} else {
System.out.println("没有发现这个类型。");
}
}
}
class Factory {
public static Fruit getFruitInstance(String type) {
Fruit f = null;
//通过Class类来完成 通过包名和类名来实例化这个类
//这个方法返回的是object需要一个转型
try {
f=(Fruit)Class.forName("com.miao.factoryDemo3"+type).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return f;
}
}
public class factoryDemo3 {
public static void main(String args[]) {
// 以下是以前紧密耦合的工厂使用方法,子类与父类紧紧结合
/**
* Fruit f=new Apple(); f.grow(); f.pick();
*/
// //////////////////////////////
/**
* //下面用上面的类Factory来实现 Fruit f=Factory.getFruitInstance(); f.grow();
* f.pick(); /////////////////////////////
*/
// demo2 中对其进行修改
if (args.length == 0) {
System.out.println("请输入要使用的类名称:");
System.exit(1);
}
Fruit f = Factory.getFruitInstance(args[0]);
if (f != null) {
f.grow();
f.pick();
} else {
System.out.println("没有发现这个类型。");
}
}
}