工厂模式:不修改工厂,只增删类对应修改配置文件就OK啦!
我们的最终目的是:不修改工厂,只需添加新的类和配置文件就能实现工厂生产该子类对象。这种开发思路在我们的开发过程中是随处可见的,比如在:Spring , Hibernate,Struts中应用得相当的普遍,理解了这一点对我们学习SSH那是非常的顺手哦!
当然具体的用法需要在实际的项目中来体验和优化!
更详细的介绍请看本Page下载文件:CarFactory_code.rar
package com.cdl.dp.factory2;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.util.InvalidPropertiesFormatException;import java.util.Properties;import java.util.Scanner;//参考:http://www.blogjava.net/jzgl-ever/archive/2008/07/26/217704.html//参考:interfaceAndFactory.CarFactory//参考:package com.cdl.dp.factory;interface Car {public void run();public void stop();}class Benz implements Car {public void run() {System.out.println("Benz开始启动了。。。。。");}public void stop() {System.out.println("Benz停车了。。。。。");}}class Ford implements Car {public void run() {System.out.println("Ford开始启动了。。。");}public void stop() {System.out.println("Ford停车了。。。。");}}class Toyota implements Car {public void run() {System.out.println("Toyota开始启动了。。。");}public void stop() {System.out.println("Toyota停车了。。。。");}}// 扩展一个我自己的品牌,O(∩_∩)O哈哈~class Cdliang implements Car {public void run() {System.out.println("Cdliang开始启动了。。。");}public void stop() {System.out.println("Cdliang停车了。。。。");}}class BYD implements Car {public void run() {System.out.println("BYD开始启动了。。。");}public void stop() {System.out.println("BYD停车了。。。。");}}class ProduceCar {//通过carClassPath反射,生成一个car实例public static Car getCarInstance(String carClassPath) {Car c = null;try {c = (Car) Class.forName(carClassPath).newInstance();// 利用反射得到汽车类型,path.package.ClassName当然我们要捕获异常啦} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return c;}}// 写一个加载XML文件的类,加载后就好供我们的程序使用了噻class InitProperties {public static Properties getProperties() {// 静态的方法可以让我们不实例化就直接调用Properties pro = new Properties();try {pro.loadFromXML(new FileInputStream("cdl2.xml"));} catch (InvalidPropertiesFormatException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}System.out.println(pro);return pro;}}public class CarFactory {public static void main(String[] args) {Properties pro = new Properties();pro = InitProperties.getProperties();System.out.println("请输入你要的车品牌:");Scanner sc = new Scanner(System.in);String carName = sc.nextLine().trim();Car c = ProduceCar.getCarInstance((String) pro.get(carName));if (c != null) {// 如果这类存在那么就调用它的方法c.run();c.stop();} else {System.out.println("造不了这种汽车。。。");}}}运行结果:{Benz=com.cdl.dp.factory2.Benz, Ford=com.cdl.dp.factory2.Ford, BYD=com.cdl.dp.factory2.BYD, Toyota=com.cdl.dp.factory2.Toyota, Cdliang=com.cdl.dp.factory2.Cdliang}请输入你要的车品牌:BYDBYD开始启动了。。。BYD停车了。。。。.