JavaSE020_反射应用之工厂模式

来源:互联网 发布:php地图定位源代码 编辑:程序博客网 时间:2024/06/05 03:02

一、没有使用反射机制的工厂模式

package com.cctvjiatao.Reflect;public interface Fruit {public abstract void eat();}
package com.cctvjiatao.Reflect;class Apple implements Fruit{@Overridepublic void eat() {System.out.println("Apple");}}class Orange implements Fruit{@Overridepublic void eat() {System.out.println("Orange");}}
package com.cctvjiatao.Reflect;/** * 构造工厂类,以后如果我们在添加其他的实例的时候只需要修改工厂类就行了 */public class Factory{public static Fruit getInstance(String fruitName){Fruit fruit = null;if("Apple".equals(fruitName)){fruit = new Apple();}if("Orange".equals(fruitName)){fruit = new Orange();}return fruit;}}
package com.cctvjiatao.Reflect;/** * 测试类 * @author keletao */public class Hello {public static void main(String[] args) {Fruit fruit = Factory.getInstance("Orange");fruit.eat();}}
【运行结果】:Orange

这样,当我们在添加一个子类的时候,就需要修改工厂类了。如果我们添加太多的子类的时候,改的就会很多。

二、使用了反射机制的工厂模式

package com.cctvjiatao.Reflect;public interface Fruit {public abstract void eat();}
package com.cctvjiatao.Reflect;class Apple implements Fruit{@Overridepublic void eat() {System.out.println("Apple");}}class Orange implements Fruit{@Overridepublic void eat() {System.out.println("Orange");}}
package com.cctvjiatao.Reflect;/** * 构造工厂类,现在就算我们添加任意多个子类的时候,工厂类就不需要修改 */public class Factory{public static Fruit getInstance(String ClassName){Fruit fruit = null;try {fruit = (Fruit) Class.forName(ClassName).newInstance();} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {e.printStackTrace();}return fruit;}}
package com.cctvjiatao.Reflect;/** * 测试类 * @author keletao */public class Hello {public static void main(String[] args) {Fruit fruit = Factory.getInstance("com.cctvjiatao.Reflect.Orange");if(fruit != null){fruit.eat();}}}
【运行结果】:Orange
现在就算我们添加任意多个子类的时候,工厂类就不需要修改。

三、反射机制+属性文件的工厂模式

上面的代码虽然可以通过反射取得接口的实例,但是需要传入完整的包和类名。而且用户也无法知道一个接口有多少个可以使用的子类,所以我们通过属性文件的形式配置所需要的子类。

下面我们来看看: 结合属性文件的工厂模式

首先创建一个Fruit.properties的资源文件:

apple=Reflect.Appleorange=Reflect.Orange
主类代码:

package com.cctvjiatao.Reflect;class Apple implements Fruit{@Overridepublic void eat() {System.out.println("Apple");}}class Orange implements Fruit{@Overridepublic void eat() {System.out.println("Orange");}}
package com.cctvjiatao.Reflect;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.Properties;/** * 操作属性文件类 * @author keletao */public class InitPro {public static Properties getPro() throws FileNotFoundException, IOException {Properties pro = new Properties();File f = new File("Fruit.properties");if (f.exists()) {pro.load(new FileInputStream(f));} else {pro.setProperty("apple", "Reflect.Apple");pro.setProperty("orange", "Reflect.Orange");pro.store(new FileOutputStream(f), "FRUIT CLASS");}return pro;}}
package com.cctvjiatao.Reflect;/** * 构造工厂类 */public class Factory{public static Fruit getInstance(String ClassName){Fruit fruit = null;try {fruit = (Fruit) Class.forName(ClassName).newInstance();} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {e.printStackTrace();}return fruit;}}
package com.cctvjiatao.Reflect;import java.io.IOException;import java.util.Properties;/** * 测试类 * @author keletao */public class Hello {public static void main(String[] args) {try {Properties pro=InitPro.getPro();Fruit fruit = Factory.getInstance(pro.getProperty("apple"));if(fruit != null){fruit.eat();}} catch (IOException e) {e.printStackTrace();}}}
【运行结果】:Apple

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 耳朵里飞进去虫怎么办 耳朵里进虫子了怎么办 耳朵进虫子了怎么办啊 耳朵里进了蚊子怎么办 有虫子爬进耳朵怎么办 虫子死在耳朵里怎么办 早上起床口苦口臭怎么办 耳朵被耳屎堵了怎么办 油耳朵被堵住了怎么办 棉签掏耳朵堵了怎么办 耳朵被气堵住了怎么办 掏耳朵发炎了疼怎么办 掏耳朵掏深了疼怎么办 耳朵里进了虫子怎么办? 耳朵里飞进小虫怎么办 一只耳朵听力差怎么办 62岁耳朵有点聋怎么办 一支耳朵有点聋怎么办 80岁老人耳朵聋怎么办 被nlp课程洗脑了怎么办 手上张了个鸡眼怎么办 手上长了个鸡眼怎么办 6岁儿童手指脱皮怎么办 手指骨折后关节僵硬怎么办 手指外伤后关节肿大僵硬怎么办 胳膊骨折了手肿怎么办 耳朵被肘了耳鸣怎么办 耳朵鼓膜外显的怎么办 耳膜破了怎么办为好 耳朵的鼓膜破了怎么办 被打耳鼓膜穿孔怎么办 两只耳朵嗡嗡响怎么办 耳朵长了个脓包怎么办 胸一个大一个小怎么办 把耳朵掏出血了怎么办 掏耳朵戳出血了怎么办 耳朵戳伤流血了怎么办 耳朵挖破出血了怎么办 耳朵让耳屎堵了怎么办 手被牙齿划破了怎么办 耳朵掏伤了很痛怎么办