Java设计模式之工厂模式(Factory)hrs.docx
《Java设计模式之工厂模式(Factory)hrs.docx》由会员分享,可在线阅读,更多相关《Java设计模式之工厂模式(Factory)hrs.docx(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java设计模式之工厂模式(Factory) 时间:2009-08-04 17:23来源:未知作者:和水柔石 CSDN IE QQ 百度 我挖 Google POCO Yahoo 新浪 365Key 天极 和讯 博拉 Live 奇客 鲜果 收客 饭否 叽歪 挖客 核心提示:作者:和水柔柔石 一一、引子子 话说说十年前前,有一一个爆发发户,他他家有三三辆汽车车(Beenz (奔驰驰)、BBmw (宝马马)、AAudii (奥奥迪)看看来这人人比较爱爱国,没没有日本本车),还还雇了司司机为他他开车。不不过,爆爆发户坐坐车时总总是这样样:上BBenzz 车后后跟司机机说 开开奔驰车车! ,坐坐上Bm
2、mw 后后他说 开 作者:和水水柔石 一、引子话话说十年年前,有有一个爆爆发户,他他家有三三辆汽车车(Beenz (奔驰驰)、BBmw (宝马马)、AAudii (奥奥迪)看看来这人人比较爱爱国,没没有日本本车),还还雇了司司机为他他开车。不不过,爆爆发户坐坐车时总总是这样样:上BBenzz 车后后跟司机机说 开奔驰驰车! ,坐坐上Bmmw 后后他说 开宝宝马车! ,坐坐上Auudi 后他说说 开开奥迪车车! 。 你你一定说说:这人人有病!直接说说开车不不就行了了?! 而当把把这个爆爆发户的的行为放放到我们们程序语语言中来来,我们们发现CC 语言言一直是是通过这这种方式式来坐车车的! 幸运的的
3、是,这这种有病病的现象象在OOO 语言言中可以以避免了了。下面面以Jaava 语言为为基础来来引入我我们本文文的主题题:工厂厂模式! 二、简介工工厂模式式主要是是为创建建对象提提供了接接口。工工厂模式式按照JJavaa 与模模式中中的提法法分为三三类:11. 简简单工厂厂模式(Simmplee Faactoory) 2. 工厂厂方法模模式(FFacttoryy Meethood) 3. 抽象工工厂模式式(Abbstrractt Faactoory) 这三三种模式式从上到到下逐步步抽象,并并且更具具一般性性。还有有一种分分类法,就就是将简简单工厂厂模式看看为工厂厂方法模模式的一一种特例例,两个个
4、归为一一类。下下面是使使用工厂厂模式的的两种情情况:11. 在在编码时时不能预预见需要要创建哪哪种类的的实例。2. 系统不应依赖于产品类实例如何被创建、组合和表达的细节 三、简单工工厂模式式顾名思思义,这这个模式式本身很很简单,而而且使用用在业务务较简单单的情况况下。它它由三种种角色组组成(关关系见下下面的类类图):1、工工厂类角角色:这这是本模模式的核核心,含含有一定定的商业业逻辑和和判断逻逻辑。在在javva 中中它往往往由一个个具体类类实现。 2、抽抽象产品品角色:它一般般是具体体产品继继承的父父类或者者实现的的接口。在在javva 中中由接口口或者抽抽象类来来实现。 3、具具体产品品角
5、色:工厂类类所创建建的对象象就是此此角色的的实例。在在javva 中中由一个个具体类类实现。那么简简单工厂厂模式怎怎么用呢呢?我来来举个例例子吧,我我想这个个比讲一一大段理理论上的的文字描描述要容容易理解解的多!下面就就来给那那个暴发发户治病病: PP 在使使用了简简单工厂厂模式后后,现在在暴发户户只需要要坐在车车里对司司机说句句: 开车 就可可以了。来来看看怎怎么实现现的:1. /抽象象产品角角色 2. publiicintterffaceeCaar 3. publiicvoiidddrivve(); 4. 5. /具体体产品角角色 6. publiicclaassBennziimpllem
6、eentssCaar 7. publiicvoiidddrivve() 8. Systeem.oout.priintlln(DriivinngBBenzz); 9. 10. 11. 12. publiicclaassBmwwimmpleemenntsCarr 13. publiicvoiidddrivve() 14. Systeem.oout.priintlln(DriivinngBBmw); 15. 16. 。(奥奥迪我就就不写了了:P ) 1. /工厂厂类角色色 2. publiicclaassDriiverr 3. 4. /工厂厂方法 5. /注意意返回回类型为为抽象产产品角色色 6.
7、publiicstaaticcCaarddrivverCCar(Strringgs)thrrowssExxcepptioon 7. 8. /判断断逻辑,返返回具体体的产品品角色给给Cliientt 9. if(s.equualssIgnnoreeCasse(Bennz)rretuurnnewwBeenz(); 10. elseif(ss.eqquallsIggnorreCaase(Bmmw) 11. returrnnewwBmmw(); 12. 13. . 14. elsethrrownewwExxcepptioon(); 15. 。 16. 17. /欢迎迎暴发户户出场. 18. publi
8、icclaassMaggnatte 19. publiicstaaticcvoiidmmainn(Sttrinngarrgs) 20. try 21. /告诉诉司机我我今天坐坐奔驰 22. Carccar=DDrivver.driiverrCarr(bbenzz); 23. /下命命令:开开车 24. car.ddrivve(); 25. 。 如果将所有有的类放放在一个个文件中中,请不不要忘记记只能有有一个类类被声明明为puubliic 。 程序中中类之间间的关系系如下:这便是简单单工厂模模式了。下下面是其其好处: 首先先,使用用了简单单工厂模模式后,我我们的程程序不在在 有有病 ,更加加符合
9、现现实中的的情况;而且客客户端免免除了直直接创建建产品对对象的责责任,而而仅仅负负责 消费 产品品(正如如暴发户户所为)。下面我们从开闭原则上来分析下简单工厂模式。当暴发户增加了一辆车的时候,只要符合抽象产品制定的合同,那么只要通知工厂类知道就可以被客户使用了。那么对于产品部分来说,它是符合开闭原则的- 对扩展开放、对修改关闭;但是工厂部分好像不太理想,因为每增加一辆车,都要在工厂类中增加相应的商业逻辑和判断逻辑,这显自然是违背开闭原则的。对于这样的工厂类(在我们的例子中是为司机师傅),我们称它为全能类或者上帝类。我们举的例子是最简单的情况,而在实际应用中,很可能产品是一个多层次的树状结构。由
10、于简单工厂模式中只有一个工厂类来对应这些产品,所以这可能会把我们的上帝类坏了,进而累坏了我们可爱的程序员:( 正如我前面提到的简单工厂模式适用于业务将简单的情况下。而对于复杂的业务环境可能不太适应阿。这就应该由工厂方法模式来出场了! 四、工厂方方法模式式先来看看下它的的组成吧吧:1、抽抽象工厂厂角色:这是工工厂方法法模式的的核心,它它与应用用程序无无关。是是具体工工厂角色色必须实实现的接接口或者者必须继继承的父父类。在在javva 中中它由抽抽象类或或者接口口来实现现。2、具具体工厂厂角色:它含有有和具体体业务逻逻辑有关关的代码码。由应应用程序序调用以以创建对对应的具具体产品品的对象象。在jj
11、avaa 中它它由具体体的类来来实现。3、抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java 中一般有抽象类或者接口来实现。4、具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java 中由具体的类来实现。来用类图来清晰的表示下的它们之间的关系: 我们还是老老规矩使使用一个个完整的的例子来来看看工工厂模式式各个角角色之间间是如何何来协调调的。话话说暴发发户生意意越做越越大,自自己的爱爱车也越越来越多多。这可可苦了那那位司机机师傅了了,什么么车它都都要记得得,维护护,都要要经过他他来使用用!于是是暴发户户同情他他说:看看你跟我我这么多多年的份份上,以以后你不不用这么么辛苦
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 设计 模式 工厂 Factory hrs
限制150内