【模式】抽象工厂模式

天跟漏了似的,下了一整天的雨,本来打算和小小去看电影来着,结果被困在家里,哪都去不了~

工厂模式看了好几遍,但是还是总把抽象工厂和工厂方法弄混,blog下来让自己有点记性。
        工厂模式解决这样的问题:
        需要为特定的“客户”提供特定系列的对象,这样一系列相关对象需要被实例化,我们有需要判断在情况A时,实例化对象a;在情况B,实例化对象b。类型A和B很相似,拥有相似的接口,而且完成相似的功能,只不过具体实现有差别——a对象属于A系列中的一种,b对象属于B系列中的一种。A系列有a1对象可以解决C这样的问题,B系列有b1对象也可以解决C问题;A系列有a2可以解决D问题,B系列也有b2可以解决D问题。一种可能的解决办法是用switch-case结构,但是这会造成维护时的负担,扩展性也不好,既要判断是哪种问题,又要判断要用哪种系列。用抽象工厂可以解决这样的问题。
        Abstract Factory模式通过一个抽象类,来指定那些对象将被创建,然后为每一系列对象实现一个具体类。有这些具体类来做实际的工作。这样会对“客户”隐藏具体使用了什么对象,是对象A还是对象B,客户并不了解,客户只需要提供需求,然后由那个抽象类来决定用那种具体类。
        过程是这样的:
                               需要一个显卡驱动       
      1. 客户---------------------------------------------->对象工厂
                                                                                      |
                                                                                      |         创建一个ATI显卡驱动
                                                                                      |
                                                                                 ATI系列
                               给客户一个显卡驱动       
      2. 客户<----------------------------------------------对象工厂
                                                                                     
                                                                                 ATI系列
                                        
      3. 客户                                                                 对象工厂
              |                                                                     
              |          使用这个ATI显卡驱动                                                          
              |                                                                     
              |-------------------------------------------------> ATI系列
                               需要一个主板驱动       
      4. 客户---------------------------------------------->对象工厂
                                                                                      |
                                                                                      |         创建一个ATI主板驱动
                                                                                      |
                                                                                 ATI系列
                               给客户一个主板驱动       
      5. 客户<----------------------------------------------对象工厂
                                                                                     
                                                                                 ATI系列
                                        
      6. 客户                                                                 对象工厂
              |                                                                     
              |          使用这个ATI主板和显卡驱动                                                          
              |                                                                     
              |-------------------------------------------------> ATI系列

        以上其实是一般情况,更隔路的情况在于,客户需要一个Intel主板驱动和一个ATI显卡驱动,那么我们就需要拜托工厂给我们做成这样:(只有4~6,1~3一样)
                                        需要一个主板驱动       
      4. 客户---------------------------------------------->对象工厂
                                                                                      |
                                                                                      |         创建一个Intel主板驱动
                                                                                      |
                                                                                 Intel系列
                               给客户一个主板驱动       
      5. 客户<----------------------------------------------对象工厂
                                                                                     
                                                                                 Intel系列
                                        
      6. 客户                                                                 对象工厂
              |              使用Intel主板驱动                                                       
              |  ------------------------------------------------>Intel系列                                                               
              |              使用ATI显卡驱动                                                       
              |-------------------------------------------------> ATI系列
       
        当问题领域中有不同系列(Intel和ATI)的对象出现,并且每个系列都将被用于不同情况时(又有显卡驱动又有主板驱动),就应该使用Abstract Factory模式。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值