利用反射创建万能工厂。
(基础知识,适合自学者和初学者,自己总结的)
总体思路 + 代码
一. 先创建一个抽象类。比如:水果类 firiut。里面写一个方法。比如:吃。eat();
二. 再创建2个普通类 或者N个。比如:苹果(apple),梨(pear) 继承这个抽象类,同时继承方法。
三. 再创建一个普通类 比如:工厂(Factory) 方法名随意(如:getInstance)
四. 工厂类写一个静态方法。1.静态方法。2.水果类作为类型,传入参数 string类型(形参)比如:getInstance(String name) 。
五. 利用反射,因为是String类型,所以要返回。而且还要强转。
{ Class<?> c = Class.forName(name); return (friut) c.newInstance(); }
六. 写一个测试类 在main里面开始 new 对象。
通过水果类new一个对象,调用水果类方法。
firut f = new Factory.getInstance(“包名.类名”);
f.eat();
// 反射,类名填写什么,就调用哪个类的方法。
好处是: 再次添加水果,可以直接创建一个新类。继承方法,重写方法。最后直接调用就可以。
具体代码如下:
package com.bao.test;
/**
* 利用反射练习万能工厂 class.forName(包名.类名);
* @author 冒险岛
*/
class apple extends friut {
@Override
public void eat() {
System.out.println("吃苹果");
}
}
class banana extends friut {
@Override
public void eat() {
System.out.println("吃香蕉");
}
}
abstract class friut {
public abstract void eat();
}
class Factory {
public static friut getInstance(String name) throws Exception {
Class<?> c = Class.forName(name);
return (friut) c.newInstance();
}
}
public class Test {
public static void main(String[] args) throws Exception {
friut f = Factory.getInstance("com.baochen.test.banana");
f.eat();
}
}
QQ群:819800089 有兴趣的小伙伴可以一起学习