工厂模式的扩展
工厂模式的扩展
1.添加配置文件,
american latte
2.。修改工厂方法
public abstract class Coffee {
//咖啡名
public abstract String getName();
//加糖
public void addSuger(){
System.out.println("Suger");
}
//加牛奶
public void addMilk(){
System.out.println("Milk");
}
}
public class LatteCoffee extends Coffee {
@Override
public String getName() {
return "拿铁咖啡";
}
}
public class AmericanCoffee extends Coffee {
@Override
public String getName() {
return "美式咖啡";
}
}
工厂方法
public class CoffeeFactory {
//加载配置文件,获取配置文件中配置的全类名,并创建该类的对象进行存储
//定义容器对象存储咖啡对象
private static Map<String,Coffee> map=new HashMap<>();
static {
//创建Properties对象
Properties p=new Properties();
//调用p对象中的load方法进行配置文件的加载
InputStream is = CoffeeFactory.class.getClassLoader().getResourceAsStream("beans.properties");
try{
p.load(is);
//遍历Propertise集合对象
Set<Object> keys = p.keySet();
for(Object key : keys){
//根据键获取值
String className=p.getProperty((String) key);
//获取字节码对象
Class clazz = Class.forName(className);
//通过反射技术创建对象
Coffee obj = (Coffee) clazz.newInstance();
map.put((String)key,obj);
}
}catch (Exception e){
e.printStackTrace();
}
}
//根据名称获取对象
public static Coffee createCoffee(String name){
return map.get(name);
}
}
实例
public class Client {
public static void main(String[] args) {
CoffeeFactory.createCoffee("american");
System.out.println(coffee.getName());
System.out.println("=========");
Coffee latte = CofffeeFctory.crateCoffee("latte");
System.out.println(latte.getName());
}
}