`
Tristan_S
  • 浏览: 362671 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

简单工厂 工厂方法 抽象工厂

 
阅读更多
http://www.cnblogs.com/kelin1314/archive/2009/01/04/1368605.html

前提 所有产品共用一个接口

简单工厂 工厂中返回一个new的产品
如果产品种类增加了, 需要修改工厂的代码

工厂方法 工厂是一个接口, 下面有具体实现工厂
如果产品种类增加了, 接口不用修改,只需要增加实现工厂.
开闭原则,修改关闭, 扩展开放。

抽象工厂 如果产品分为多个接口,而这些产品又互相有联系
例如数据库间的切换
一个维度是实体对象(IUser, IDepartment)
一个维度是数据库实例对象(SqlserverUser, AccessUser, SqlserverDepartment, AccessDepartment)
抽象工厂(SqlFactory, AccessFactory)

缺点: 过于复杂,增加实体对象时需要修改很多类。
解决方法: 用简单工厂来代替抽象工厂, 并用反射,xml配置文件来取代switch if判断条件。




----
另外网上说到的用抽象工厂来处理DAO在不同数据库间的切换问题
但实际上可以用facade模式来实现类似功能
HPSC中用到了facade模式来设置调用外系统的接口
可以随时切换成开发环境,测试环境,生成环境
用spring的annotation来管理

@Service("sbsFacade")
public class SBSFacadeImpl implements ISBSFacade {

    @Autowired
    @Qualifier("customerOrgService")
    private CustomerOrganizationService customerOrgService;

...



@Service 将这个类放在spring容器内管理,并定义个id
@Autowired
@Qualifier("customerOrgService")  从spring环境中将id为customerOrgService的bean注入到变量中

如果要切换成开发环境可以用
@Qualifier("customerOrgServiceMockData") 来切换
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics