客户需要一系列的多种产品,这些产品有都是由四个零件组成,其中三个零件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
其他产品使用同上
}
首先客户给出产品清单:黄男,黄女,白男,白女,黑男,黑女。
第一步:
根据清单,所有的产品都有四个相同系列的零件组成,是通一种产品人,只是其规格不同。
那么定义一个人的产品索引模板(产品指标表格):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
其他产品使用同上
}