简单工厂模式:
简单工厂模式是用的最多的一个,复杂度低
业务场景:
一个工厂类要生产华为手机(class PhoneNamedHuawei),小米手机(class PhoneNamedXiaomi),vivo手机(class PhoneNamedVivo)
简单模式下的代码写法:
- 首先三个实例实现一个接口
interface Phone{
abstract void brand();
}
class PhoneNamedHuawei implements Phone{
@Override
public void brand(){
System.out.println("华为")
}
}
class PhoneNamedXiaomi implements Phone{
@Override
public void brand(){
System.out.println("小米")
}
}
class PhoneNamedVivo implements Phone{
@Override
public void brand(){
System.out.println("vivo")
}
}
- 工厂类
- applicationContext.properties文件
小米 = com.example.test.Phone.PhoneNamedXiaomi 华为 = com.example.test.Phone.PhoneNamedHuawei vivo = com.example.test.Phone.PhoneNamedVivo
-
根据参数通过IO动态匹配对应类,如果添加了新的手机实例,只需在配置文件中新加一笔键值对就可以轻松完成更新
class PhoneFactory{ private static Properties env = new Properties(); //在类加载时就完成流操作 static{ try{ InputStream input = PhoneFactory.class.getResourceAsStream("/applicationContext.properties"); env.load(input); input.close(); } catch(IOException e){ e.printStackTrace(); } } public static Phone getPhone(String phoneName){ Phone phone = null; try{ Class clazz = Class.forName(env.getProperty(phoneName)); phone = (Phone)clazz.newInstance(); }catch (ClassNotFoundException e){ e.printStackTrace(); }catch (InstantiationException e){ e.printStackTrace(); }catch (IllegalAccessException e){ e.printStackTrace(); } } }
- applicationContext.properties文件
执行内容
public class Test{
public static void main(String[] args){
//创建小米手机
Phone xiaomi = PhoneFactory.getPhone("小米");
xiaomi.brand();
//创建华为手机
Phone huawei = PhoneFactory.getPhone("华为");
huawei.brand();
}
}