不直接new
简单工厂
场景
工厂统一管理创建,使用方只告知所需类型,由工厂负责创建
代码
1 | interface Product{ |
为了避免过多的if-else,还可以考虑用反射机制
fqcn可以使用注解/配置文件,避免手动传入
1 | class Factory{ |
优缺点
- 客户端无需知道创建细节
- 工厂统一创建,代码逻辑集中
- 工厂可以附加额外逻辑,比如单例,缓存等
应用
java.nio.charset.Charset的forName方法
抽象工厂
工厂也有体系,每个工厂生产一组产品套系
工厂也进行了一层抽象,实现了更高层接口,工厂的工厂
1 | interface Factory{ |
应用
javax.xml.xpath.XPathFactory的newInstance方法
javax.xml.parsers.DocumentBuilderFactory的newInstance方法
一分也是爱~
版权声明
This site by Linest is licensed under a Creative Commons BY-NC-ND 4.0 International License.
由Linest创作并维护的博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。
本文永久链接:http://linest.github.io/2016/11/24/java-pattern-factory/