基于反射与配置文件的工厂模式
程序员文章站
2022-05-28 18:02:57
...
首先先创建一个接口Fruit.java,我们的工厂就是专门造水果的
我们的工厂可以早的水果是那些呢??就以苹果、香蕉、橘子为例
然后是一个配置文件 resouse.properties。实际上就相当于类别清单。
对配置文件呢要有一个处理类:InitProperty.java
接下来最重要的是我们的工厂类,这个类仔细瞧好了我们用单例模式来把它写出FactoryOfFruit.java
我们这个工厂到底怎么样呢,能不能生产水果呢。那就让我们测试一下写我们的Test.java
结果:
***吃香蕉****
接下来你就可以吃自己想要的水果喽!!
package factory.myinterface; /** * @author zoupengfei * */ public interface Fruit { final String name=""; public void eated(); }
我们的工厂可以早的水果是那些呢??就以苹果、香蕉、橘子为例
//苹果 package factory.myimpl; import factory.myinterface.Fruit; /** * @author zoupengfei * */ public class Apple implements Fruit { @Override public void eated() { System.out.println("***吃苹果****"); } } //香蕉 package factory.myimpl; import factory.myinterface.Fruit; /** * @author zoupengfei * */ public class Banana implements Fruit { @Override public void eated() { System.out.println("***吃香蕉****"); } } //橘子 package factory.myimpl; import factory.myinterface.Fruit; /** * @author zoupengfei * */ public class Orange implements Fruit { @Override public void eated() { System.out.println("***吃橘子****"); } }
然后是一个配置文件 resouse.properties。实际上就相当于类别清单。
apple=myimpl.Apple orange=myimpl.Orange banana=myimpl.Banana
对配置文件呢要有一个处理类:InitProperty.java
package factory.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; /** * @author zoupengfei * */ public class InitProperty { public static Properties getProperty(String filePath){ Properties pro=new Properties(); File file=new File(filePath); if(file!=null){ try { FileInputStream in=new FileInputStream(file); pro.load(in); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }else{ pro.setProperty("apple", "myimpl.Apple"); } return pro; } }
接下来最重要的是我们的工厂类,这个类仔细瞧好了我们用单例模式来把它写出FactoryOfFruit.java
package factory.myfactory; import java.util.Properties; import factory.myinterface.Fruit; import factory.util.InitProperty; /** * @author zoupengfei * */ public class FactoryOfFruit { private static FactoryOfFruit factoryOfFruit; private Properties pro=new Properties(); private FactoryOfFruit(){ } public static FactoryOfFruit getInstance(){ if(factoryOfFruit==null){ synchronized(FactoryOfFruit.class) { factoryOfFruit=new FactoryOfFruit(); } } return factoryOfFruit; } public Fruit getFruitOf(String sort){ Fruit f=null; try { f=(Fruit) Class.forName(pro.getProperty(sort)).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return f; } public void init(String filePath){ pro=InitProperty.getProperty(filePath); } }
我们这个工厂到底怎么样呢,能不能生产水果呢。那就让我们测试一下写我们的Test.java
package factory.test; import factory.myfactory.FactoryOfFruit; import factory.myinterface.Fruit; /** * @author zoupengfei * */ public class Test { public static void main(String[] args) { FactoryOfFruit factory=FactoryOfFruit.getInstance(); factory.init("src/resouse.properties"); Fruit f=factory.getFruitOf("banana"); f.eated(); } }
结果:
***吃香蕉****
接下来你就可以吃自己想要的水果喽!!
上一篇: 基于 HTML5 WebGL 的 3D 工控裙房系统
下一篇: iOS Sqlite3数据库简明教程