7、抽象工厂模式(AbstractFactory)

   客户需要一系列的多种产品,这些产品有都是由四个零件组成,其中三个零件a,b,c 需要工厂甲或工厂丙生产,零件d由工厂乙或者工厂丁生产。
   首先客户给出产品清单:黄男,黄女,白男,白女,黑男,黑女。


第一步:
根据清单,所有的产品都有四个相同系列的零件组成,是通一种产品人,只是其规格不同。
那么定义一个人的产品索引模板(产品指标表格):IHuman 


第二步:


   
黄男:YellowMaleHuman 工厂
黄女:YellowFemaleHuman 工厂
    上面两个产品有三个共用零件a黄,b黄,c黄;那么建立一个合资工厂 YellowHuman 来生产这三个零件。


白男:WhiteMaleHuman 工厂
白女:WhiteFemaleHuman 工厂
    上面两个产品有三个共用零件a白,b白,c白;那么建立一个合资工厂 WhiteHuman 来生产这三个零件。


黑男:BlackMaleHuman 工厂
黑女:BlackFemaleHuman 工厂
    上面两个产品有三个共用零件a黑,b黑,c黑;那么建立一个合资工厂 BlackHuman 来生产这三个零件。


第三步:
上述架构不好管理,那么再分析我们可以在建立一个虚拟的工厂(也可以说时抽象的工厂)来下达生产任务给上述六个工厂


虚拟的工厂:StandardHumanFactory 向各自工厂发出生产指令


再建立两个运营小组(也可以说时抽象的工厂)分别处理男人和女人的生产任务


男人运营小组:MaleHumanFactory 负责处理所有的男人生产订单,将订单整理好交给虚拟工厂 StandardHumanFactory
女人运营小组:FemaleHumanFactory 负责处理所有的女人生产订单,将订单整理好交给虚拟工厂 StandardHumanFactory


MaleHumanFactory 和 FemaleHumanFactory 下达的每一个订单都记录一个产品名称(IHuman模板的索引)如:pYellowFemaleHuman 或者 pYellowMaleHuman 。
可以通过这个索引随时查看某产品的各个零件情况。




运营及工厂分布图如下:








main
{
    
    IHumanFactory *pFemaleHumanFactory = new CFemaleHumanFactory<CYellowFemaleHuman>();    //指定一个创建女人的运营小组,并分配给运营小组创建黄种女人的任务  
    IHuman *pYellowFemaleHuman = pFemaleHumanFactory->CreateYellowHuman();   //下达生产订单
                   //pFemaleHumanFactory 将订单交给 CStandardHumanFactory<T>::CreateHuman() 来完成
                   //CStandardHumanFactory 创建了一个 CYellowFemaleHuman
                   //创建CYellowFemaleHuman 时 先创建 CYellowHuman(生产a黄,b黄,c黄,三个零件) 然后再创建自己CYellowFemaleHuman(生产一个零件d'黄)
    pYellowFemaleHuman->Cry();    //调用 pYellowFemaleHuman 的 Cry 零件
    pYellowFemaleHuman->Laugh();  //调用 pYellowFemaleHuman 的 Laugh 零件
    pYellowFemaleHuman->Talk();   //调用 pYellowFemaleHuman 的 Talk 零件
    pYellowFemaleHuman->Sex();    //调用 pYellowFemaleHuman 的 Sex 零件




    IHumanFactory *pFemaleHumanFactory = new CFemaleHumanFactory<CYellowMaleHuman>();    //指定一个创建女人的运营小组,并分配给运营小组创建黄种女人的任务  
    IHuman *pYellowMaleHuman = pMaleHumanFactory->CreateYellowHuman();   //下达生产订单
                   //pMaleHumanFactory 将订单交给 CStandardHumanFactory<T>::CreateHuman() 来完成
                   //CStandardHumanFactory 创建了一个 CYellowMaleHuman
                   //创建CYellowMaleHuman 时 先创建 CYellowHuman(生产a黄,b黄,c黄,三个零件) 然后再创建自己CYellowMaleHuman(生产一个零件d黄)
    调用零件同上面的 pYellowFemaleHuman
   
   其他产品使用同上


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值