China=review.factory.factory_and_properties.ChinaCoffee American=review.factory.factory_and_properties.AmericanCoffee
public abstract class Coffee{ public abstract String getName(); }
public class AmericanCoffee extends Coffee { @Override public String getName() { return "让美国再次伟大"; } }
public class ChinaCoffee extends Coffee { @Override public String getName() { return "中国coffee"; } }
public class FactoryCoffee { private static HashMap<String, Coffee> map = new HashMap(); static { //创建配置文件对象 Properties properties ; //创建流对象 InputStream resourceAsStream; try { //实例化 resourceAsStream = FactoryCoffee.class.getClassLoader().getResourceAsStream("coffee.properties"); properties = new Properties(); //加载配置文件 properties.load(resourceAsStream); //获得键的集合 Set keyNames = properties.keySet(); //遍历集合 for (Object o : keyNames) { //获得值(类的全类名) String property = properties.getProperty((String) o); //获得类的字节码对象 Class clazz = Class.forName(property); //通过反射获得coffee对象 Coffee coffee=(Coffee) clazz.newInstance(); //放入集合 map.put((String)o, coffee); } } catch (Exception e) { throw new RuntimeException(e); } } //创造coffee对象 public static Coffee createCoffee(String name) { //从集合取出 return map.get(name); } }
public class CoffeeStore { public Coffee orderCoffee(String name){ //通过简单工厂获得coffee对象 Coffee coffee = FactoryCoffee.createCoffee(name); return coffee; } }
public class Client { public static void main(String[] args) { //创建咖啡商店对象 CoffeeStore coffeeStore = new CoffeeStore(); //获得coffee对象 Coffee coffee = coffeeStore.orderCoffee("American"); //打印coffee的名字 System.out.println(coffee.getName()); } }