http://www.cnblogs.com/cbf4life/archive/2009/12/23/1630612.html
n个产品,产品又有共通的属性,可以用抽象工厂模式,建立m个工厂去生产这对应的n个产品。
产品是一个系列的,都是轮胎,我们可以建各种各样的轮胎厂去生产轮胎,大小不一的轮胎,形状不一的轮胎,都可以单独建一个工厂去生产。但是你现在要生产气球,那就悲剧了,轮胎厂变成轮胎气球场,那改的不是一点二点。
不需要创建多个new 产品,只需要根据需求创建具体的工厂,工厂去创建产品
产品之间的依赖关系,可以由具体的工厂去实现,而对产品和抽象工厂透明
- 封装性,每个产品的实现类不是高层模块要关系的,要关心的是什么?是接口,是抽象,它不关心对象是如何创建出来,这由谁负责呢?工厂类,只要知道工厂类是谁,我就能创建出一个需要的对象,省时省力,优秀设计就应该如此。
- 产品族内的约束为非公开状态。例如生产男女比例的问题上,猜想女娲娘娘肯定有自己的打算,不能让女盛男衰,否则女性的优点不就体现不出来了吗?那在抽象工厂模式,就应该有这样的一个约束:每生产1个女性,就同时生产出1.2个男性,这样的生产过程对调用工厂类的高层模块来说是透明的,它不需要知道这个约束,我就是要一个黄色女性产品就可以了,具体的产品族内的约束是在工厂内实现的。
一个模式在什么情况下才能够使用,是很多读者比较困惑的地方,抽象工厂模式是一个简单的模式,使用的场景非常多,大家在软件产品开发过程中,涉及到不同操作系统的时候,都可以考虑使用抽象工厂模式,例如一个应用,需要在三个不同平台上运行:Windows、Linux、Android(Google发布的智能终端操作系统)上运行,你会怎么设计?分别设计三套不同的应用?非也非也,通过抽象工厂模式屏蔽掉操作系统对应用的影响。三个不同操作系统上的软件功能、应用逻辑、UI都应该是非常类似,唯一不同的是调用不同的工厂方法,由不同的产品类去处理与操作系统交互的信息。