适用场景:
需要根据"系列名称"等来获取一系列的对象实例,这些对象实例有一个聚合的业务含义,比如都属于鞋子加工过程中用到的设备。
类图分析:
角色:抽象工厂 工厂 抽象产品 产品
举例:
1、快麦erp,业务流程中需要与不同平台(淘宝、京东)交互,比如从不同平台下载订单,下载部分的代码包含平台接口请求以及转化为我们系统的订单实体的代码。
我们将这些与平台相关的业务逻辑代码提取出来,作为抽象接口,在业务代码中使用的时候以PlatformAccessManager.load(平台名,业务类.class)的形式加载。PlatformAccessManager就是抽象工厂,能够根据平台名返回该平台对应的操作类。
这里将操作类抽象出来的方式有模板模式的味道,只是具体的实现类不是模板的子类,而是类似策略模式里的策略类。
public class TradeDownloadService {
public void downLoad(String platform, String tid) {
DownloadBusiness downloadBusiness = PlatformAccessManager.load(platform, DownloadBusiness.class);
downloadBusiness.download(tid);
}
}
public interface DownloadBusiness {
Trade download(String tid);
}