Java设计模式之工厂模式(Factory).docx
《Java设计模式之工厂模式(Factory).docx》由会员分享,可在线阅读,更多相关《Java设计模式之工厂模式(Factory).docx(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Javaa设计模模式之工工厂模式式(Faactoory) 时间:220099-088-044 177:233来源源:未知知作者者:和水水柔石 CSDNNIEQQQ百度我挖挖GooogleePOCCOYaahooo新浪3665Keey天极极和讯博拉拉Livve奇客客鲜果收客客饭否叽歪歪挖客核心提示示:作者者:和水水柔石 一、引引子 话话说十年年前,有有一个爆爆发户,他家有有三辆汽汽车(BBenzz (奔奔驰)、Bmww (宝宝马)、Auddi (奥迪)看来这这人比较较爱国,没有日日本车),还雇雇了司机机为他开开车。不不过,爆爆发户坐坐车时总总是这样样:上BBenzz 车后后跟司机机说 开开奔驰车
2、车! ,坐上BBmw 后他说说 开 作者:和和水柔石石 一、引子子话说十十年前,有一个个爆发户户,他家家有三辆辆汽车(Bennz (奔驰)、Bmmw (宝马)、Auudi (奥迪迪)看来来这人比比较爱国国,没有有日本车车),还还雇了司司机为他他开车。不过,爆发户户坐车时时总是这这样:上上Bennz 车车后跟司司机说 开奔奔驰车! ,坐上BBmw 后他说说 开开宝马车车! ,坐上上Auddi 后后他说 开奥奥迪车! 。 你一一定说:这人有有病!直直接说开开车不就就行了?! 而而当把这这个爆发发户的行行为放到到我们程程序语言言中来,我们发发现C 语言一一直是通通过这种种方式来来坐车的的! 幸幸运的
3、是是,这种种有病的的现象在在OO 语言中中可以避避免了。下面以以Javva 语语言为基基础来引引入我们们本文的的主题:工厂模模式! 二、简介介工厂模模式主要要是为创创建对象象提供了了接口。工厂模模式按照照Jaava 与模式式中的的提法分分为三类类:1. 简单单工厂模模式(SSimpple Facctorry) 2. 工厂方方法模式式(Faactoory Metthodd) 33. 抽抽象工厂厂模式(Absstraact Facctorry) 这三种种模式从从上到下下逐步抽抽象,并并且更具具一般性性。还有有一种分分类法,就是将将简单工工厂模式式看为工工厂方法法模式的的一种特特例,两两个归为为一类
4、。下面是是使用工工厂模式式的两种种情况:1. 在编码码时不能能预见需需要创建建哪种类类的实例例。2. 系统统不应依依赖于产产品类实实例如何何被创建建、组合合和表达达的细节节 三、简单单工厂模模式顾名名思义,这个模模式本身身很简单单,而且且使用在在业务较较简单的的情况下下。它由由三种角角色组成成(关系系见下面面的类图图):11、工厂厂类角色色:这是是本模式式的核心心,含有有一定的的商业逻逻辑和判判断逻辑辑。在jjavaa 中它它往往由由一个具具体类实实现。 2、抽抽象产品品角色:它一般般是具体体产品继继承的父父类或者者实现的的接口。在jaava 中由接接口或者者抽象类类来实现现。 33、具体体产
5、品角角色:工工厂类所所创建的的对象就就是此角角色的实实例。在在javva 中中由一个个具体类类实现。那么么简单工工厂模式式怎么用用呢?我我来举个个例子吧吧,我想想这个比比讲一大大段理论论上的文文字描述述要容易易理解的的多!下下面就来来给那个个暴发户户治病: P 在使用用了简单单工厂模模式后,现在暴暴发户只只需要坐坐在车里里对司机机说句: 开开车 就可以以了。来来看看怎怎么实现现的:1. /抽抽象产品品角色 2. publlicintterffaceeCaar 3. publlicvoiidddrivve(); 4. 5. /具具体产品品角色 6. publlicclaassBennziimpl
6、lemeentssCaar 7. publlicvoiidddrivve() 8. Systtem.outt.prrinttln(DrriviingBennz); 9. 10. 11. 12. publlicclaassBmwwimmpleemenntsCarr 13. publlicvoiidddrivve() 14. Systtem.outt.prrinttln(DrriviingBmww); 15. 16. 。(奥迪我我就不写写了:PP ) 1. /工工厂类角角色 2. publlicclaassDriiverr 3. 4. /工工厂方法法 5. /注注意返返回类型型为抽象象产品角角色
7、6. publlicstaaticcCaarddrivverCCar(Strringgs)thrrowssExxcepptioon 7. 8. /判判断逻辑辑,返回回具体的的产品角角色给CClieent 9. if(ss.eqquallsIggnorreCaase(Beenz)retturnnnewwBeenz(); 10. elseeif(ss.eqquallsIggnorreCaase(Bmmw) 11. retuurnnewwBmmw(); 12. 13. . 14. elseethrrownewwExxcepptioon(); 15. 。 16. 17. /欢欢迎暴发发户出场场. 18
8、. publlicclaassMaggnatte 19. publlicstaaticcvoiidmmainn(Sttrinngarrgs) 20. try 21. /告告诉司机机我今天天坐奔驰驰 22. Carcarr=Driiverr.drriveerCaar(bennz); 23. /下下命令:开车 24. car.driive(); 25. 。 如果将所所有的类类放在一一个文件件中,请请不要忘忘记只能能有一个个类被声声明为ppubllic 。 程程序中类类之间的的关系如如下:这便是简简单工厂厂模式了了。下面面是其好好处: 首先,使用了了简单工工厂模式式后,我我们的程程序不在在 有有病
9、,更加加符合现现实中的的情况;而且客客户端免免除了直直接创建建产品对对象的责责任,而而仅仅负负责 消费 产品品(正如如暴发户户所为)。下面面我们从从开闭原原则上来来分析下下简单工工厂模式式。当暴暴发户增增加了一一辆车的的时候,只要符符合抽象象产品制制定的合合同,那那么只要要通知工工厂类知知道就可可以被客客户使用用了。那那么对于于产品部部分来说说,它是是符合开开闭原则则的- 对扩扩展开放放、对修修改关闭闭;但是是工厂部部分好像像不太理理想,因因为每增增加一辆辆车,都都要在工工厂类中中增加相相应的商商业逻辑辑和判断断逻辑,这显自自然是违违背开闭闭原则的的。对于于这样的的工厂类类(在我我们的例例子中
10、是是为司机机师傅),我们们称它为为全能类类或者上上帝类。我们举举的例子子是最简简单的情情况,而而在实际际应用中中,很可可能产品品是一个个多层次次的树状状结构。由于简简单工厂厂模式中中只有一一个工厂厂类来对对应这些些产品,所以这这可能会会把我们们的上帝帝类坏了了,进而而累坏了了我们可可爱的程程序员:( 正正如我前前面提到到的简单单工厂模模式适用用于业务务将简单单的情况况下。而而对于复复杂的业业务环境境可能不不太适应应阿。这这就应该该由工厂厂方法模模式来出出场了! 四、工厂厂方法模模式先来来看下它它的组成成吧:11、抽象象工厂角角色:这这是工厂厂方法模模式的核核心,它它与应用用程序无无关。是是具体
11、工工厂角色色必须实实现的接接口或者者必须继继承的父父类。在在javva 中中它由抽抽象类或或者接口口来实现现。2、具体工工厂角色色:它含含有和具具体业务务逻辑有有关的代代码。由由应用程程序调用用以创建建对应的的具体产产品的对对象。在在javva 中中它由具具体的类类来实现现。3、抽象产产品角色色:它是是具体产产品继承承的父类类或者是是实现的的接口。在jaava 中一般般有抽象象类或者者接口来来实现。4、具具体产品品角色:具体工工厂角色色所创建建的对象象就是此此角色的的实例。在jaava 中由具具体的类类来实现现。来用用类图来来清晰的的表示下下的它们们之间的的关系: 我们还是是老规矩矩使用一一个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 设计 模式 工厂 Factory
限制150内