有一种用法:给每个工厂一个ID,根据ID,把工厂放到一个数组(可以是类成员,一个管理工厂的类)里,即用ID做数组下表;创建包时,把包ID传进去,用数组下标调用相应的工厂,返回包。
之所以叫抽象工厂模式,是把工厂也和产品一样抽象出来,这样做的好处是当增加一个产品时,不需要改变原来的工厂类,只是加上相应的类。符合设计原则OCP.
1)从Factory里create出Procduct Animal,包括狗和猫.
2)Animal是Product的基类:
Dog从Animal继承下来的Product的子类:
同理Cat:
3)Factory 基类
生产Cat的Factory
生产Dog的Factory
4) 客户端代码:
项目中的实际用法:
1)PacketFactoryManager 工厂管理类
2)PacketFactoryManager::AddFactory 增加工厂接口
3)把工厂放到Manager的成员数组里,用工厂ID作为下标,每个工厂有唯一的ID
4)使用:PacketFactoryManager::CreatePacket( ID ),调用相应的Factory