设计模式学习02―工厂模式(二)
azz) throws Exception { Constructor ct = clazz.getDeclaredConstructor(); ct.setAccessible( true); return ct.newInstance(); } }
3、多工厂协调,工厂模式中,一个工厂创建一个产品也行,创建多个产品也行,当产品种类过多时,如果工厂类也较多,此时最好弄一个协调类来协调,方便调用者使用,而不是让调用者逐个去找工厂类。 单例可以,多例也就没问题了,比如数据库连接池,设置最大100个,使用工厂模式就很有效,此时需要考虑每个实例的状态,使用中的话不能被获取等等。 4、延迟实例化,有的时候产品创建和销毁比较耗费资源,可以考虑创建好之后缓存起来,用完之后不销毁,或者使用完毕后将对象改成初始状态,而不是重新创建,方便后续使用,还是连接池的例子,如果用完了,是不销毁的,还会重新使用。 5、结合反射或配置文件,代替程序new。虽然例子中我们使用的是new创建对象,但是在现实
编程中,大部分工厂都是配合反射来使用的,可以考虑将要创建的产品属性,设置工厂属性放到配置文件中,程序启动就将对象创建好,这样当增加一个简单产品时,可以做到修改配置文件即可,就算增加复杂产品,只需要新写一个工厂类,配置配置就行,而不用大量修改
源码。 结束语,工厂方法其实在项目中使用非常非常频繁,这个模式几乎人尽皆知,但却不是每个人都能用好,工厂模式通常和其他模式混合使用,变化出无穷的优秀设计。