欢迎来到天天文库
浏览记录
ID:62485182
大小:10.66 KB
页数:7页
时间:2021-05-09
《简单工厂模式和抽象工厂模式的通俗理解.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、简单工厂模式和抽象工厂模式的通俗理解以造汽车为例来通俗的说一下:(写的不好或有错误的地方欢迎大家指正)汽车制造商要造汽车卖给客户,那应该如可来做?看下面:第一:汽车制造商要知道客户要什么样的汽车,即设计汽车;第二:设计完后,一切ok后,就可以制造汽车了;根据上面二步描述,我们用程序表达出来就是(假设现在要造一辆Buick):a.设计师和工程师去设计汽车;publicclassBuickCar//设计buick车{publicstringDec(){return"Buick";}}BuickCarbuick=newBuickCar();//造了辆buick结
2、构就是上面的很好理解,我们继续:假设现在要造一辆Benze,那做法和上面一样设计汽车制造汽车。即:publicclassBenzeCar//设计汽车{//……publicstringDec(){return"Benze";}}BenzeCarbenze=newBenzeCar();//制造一辆benze汽车注:从上面的例子可以发现,制造商每次要一辆新车,都要重新设计一下(重复劳动)。而制造商设计的每一种汽车,它们之间存在一些共同的特新(比如都是流线性什么的,本人不太懂汽车)。既然有了这些共性,那么把问题高度抽象化来考虑就是,制造商不知道以后需要设计什么样的
3、汽车,也不知道以后的汽车会有什么新的特性。但是只要是汽车,都可能会有共同的特性。那么就可以提高效率。用程序表达出来就是:1.建一个汽车的抽象类:publicabstractclassCar{//……publicabstractstringDec();//汽车的共性}2.假设N年后,制造商要设计一款新车的话:publicclassXXXCar:Car//继承了原来汽车的一些共性{//……publicoverridestringDec(){return"XXXCar"};//重写了汽车的一个特性}3.ok新车的设计好了,我们又可以造车了;XXXCarxxx=n
4、ewXXXCar()现在的结构如下:===ok,以上所说的都是汽车制造过程中的第一步,及设计上的。下面来看看汽车制造过程中的问题====简单工厂模式1.从程序的角度来看:定义完class后就可以new出该class的实例。但在处理具体项目的时候,在定义完class后,往往要做一些其他的操作,才能new出该class的实例。比如类里面一些变量的赋值,条件的判断等等。当然这些操作,可以使用构造函数来实现。但是如果在一个项目中这个class的实例如果要多次用到的化,那构造函数就会很复杂,系统的开销就很大了;1.从实际问题来看:汽车制造商在设计完汽车后,不可能直接
5、就去制造汽车了,肯定要先对汽车制造过程中用的所有东西进行准备。一切准备完了后才可以制造汽车。还有如果制造商制造每一辆汽车的时候,都要去准备一次东西。那肯定是不可能的(除非特殊情况,比如某个明星花钱定做了一辆的汽车。那没办法,人家有钱呵呵)。最好的解决办法就是:建一个工厂,将工作分开,有专门的人去准备东西。工厂只要负责根据设计制造汽车就可以。2.代码来看就是://还是以buick为例//设计一个造buick的工厂类PublicclassBuickFactory{//……其他准备操作PublicBuickCarCreate()//制造汽车;{Returnnew
6、BuickCar();}}//客户端代码BuickFactorybuickfactory=newBuickFactory();//建造一个buick的汽车工厂BuickCarbuick=buickfactory.Create();//结构:===以上模式就是简单工厂模式抽象工厂模式继续进一步思考问题:假设现在制造商不造buick改造benze了。如果用简单工厂模式的问题就变成了:制造商不但要设计benze的工厂,还要重新为benze去建个工厂.(简单工厂模式的弱点)Benze工厂类设计(同buick)://客户端代码BenzeFactorybenzefac
7、tory=newBenzeFactory();//建造一个benze的汽车工厂BenzeCarbenze=benzefactory.Create();//从上面的代码可以看出,如果在一个项目中有很多这样的代码要修改的话,就会非常麻烦!(看来制造商需要对工厂进行重组了,呵呵)1.从实际问题来看参见汽车设计的过程:其实工厂在制造每种汽车的过程中有很多东西是可以一起处理。即时不能一起处理,处理方式也可能一样(比如对汽车烤漆的工作)。制造商对工厂的重组就是:建一个汽车工厂,工厂准备好东西,对不同的汽车开设不同的生产线来生产。2.将上面的问题解释到程序上就是:我们设
8、计一个抽象的工厂类,定义好抽象的方法(烤漆),让子工厂类去重写(因
此文档下载收益归作者所有