以造汽车为例来通俗的说一下:(写的不好或有错误的地方欢迎大家指正)













结构就是

上面的很好理解,我们继续:
假设现在要造一辆Benze,那做法和上面一样设计汽车 制造汽车。即:












注:从上面的例子可以发现,制造商每次要一辆新车,都要重新设计一下(重复劳动)。而制造商设计的每一种汽车,它们之间存在一些共同的特新(比如都是流线性 什么的,本人不太懂汽车)。既然有了这些共性,那么把问题高度抽象化来考虑就是,制造商不知道以后需要设计什么样的汽车,也不知道以后的汽车会有什么新的特性。但是只要是汽车,都可能会有共同的特性。那么就可以提高效率。用程序表达出来就是:
1. 建一个汽车的抽象类:








2.假设 N年后,制造商要设计一款新车的话:











3.ok新车的设计好了,我们又可以造车了;

现在的结构如下:
===ok,以上所说的都是汽车制造过程中的第一步,及设计上的。下面来看看汽车制造过程中的问题====
简单工厂模式















===以上模式就是简单工厂模式。
抽象工厂模式
继续进一步思考问题:
假设现在制造商不造buick 改造benze了。如果用简单工厂模式的问题就变成了:制造商不但要设计benze的工厂,还要重新为benze去建个工厂.(简单工厂模式的弱点)
Benze工厂类设计(同buick):
//客户端代码



从上面的代码可以看出,如果在一个项目中有很多这样的代码要修改的话,就会非常麻烦!
(看来制造商需要对工厂进行重组了,呵呵)
1.从实际问题来看
参见汽车设计的过程:其实工厂在制造每种汽车的过程中有很多东西是可以一起处理。即时不能一起处理,处理方式也可能一样(比如对汽车烤漆的工作)。
制造商对工厂的重组就是:建一个汽车工厂,工厂准备好东西,对不同的汽车开设不同的生产线来生产。
2.将上面的问题解释到程序上就是:
我们设计一个抽象的工厂类,定义好抽象的方法(烤漆),让子工厂类去重写(因为不知道每一种车要如何烤漆)
3.代码
//设计抽象工厂类








//设计buick的子工厂类 继承 工厂类












//设计benze的子工厂类












Ok,来看一下具体的代码调用:






注:其实对于第三行代码还有一种写法:
BuickCar buick = (BuickCar)carfactory.Create();但是这样在代码维护的时候还是要修改2次,还是很麻烦。虽然不能避免修改,但是可以减少修改。(buick的生产线也不可能生产出benze的,呵呵)
以上结构:
( 写玩了,刚学.net ,以上就是个人对简单工厂模式和抽象工厂模式的理解!写的不对请指正,呵呵!)
b. 一切 ok 后,就可以制造汽车了;