《JAVA与模式》之抽象工厂模式.doc

《JAVA与模式》之抽象工厂模式.doc

ID:59251414

大小:43.00 KB

页数:9页

时间:2020-09-08

《JAVA与模式》之抽象工厂模式.doc_第1页
《JAVA与模式》之抽象工厂模式.doc_第2页
《JAVA与模式》之抽象工厂模式.doc_第3页
《JAVA与模式》之抽象工厂模式.doc_第4页
《JAVA与模式》之抽象工厂模式.doc_第5页
资源描述:

《《JAVA与模式》之抽象工厂模式.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、工厂方法模式是类的创建模式,又叫做虚拟构造子(VirtualConstructor)模式或者多态性工厂(PolymorphicFactory)模式。  工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。那么工厂方法模式是在什么场景下使用呢,下面就以本人的理解举例说明:  相信很多人都做过导入导出功能,就拿导出功能来说。有这么一个需求:XX系统需要支持对数据库中的员工薪资进行导出,并且支持多种格式如:HTML、CSV、PDF等,每种格式导出的结构有所不同,比如:财务跟其他人对导出薪资的HTML格式要求可能会不一样,因为财务可能需要特定的格式方便核算或其他用

2、途。  如果使用简单工厂模式,则工厂类必定过于臃肿。因为简单工厂模式只有一个工厂类,它需要处理所有的创建的逻辑。假如以上需求暂时只支持3种导出的格式以及2种导出的结构,那工厂类则需要6个ifelse来创建6种不同的类型。如果日后需求不断增加,则后果不堪设想。  这时候就需要工厂方法模式来处理以上需求。在工厂方法模式中,核心的工厂类不再负责所有的对象的创建,而是将具体创建的工作交给子类去做。这个核心类则摇身一变,成为了一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个类应当被实例化这种细节。  这种进一步抽象化的结果,使这种工厂方法模式可以用来允许系统在不修改具体工

3、厂角色的情况下引进新的产品,这一特点无疑使得工厂方法模式具有超过简单工厂模式的优越性。下面就针对以上需求设计UML图:  从上图可以看出,这个使用的工厂方法模式的系统涉及到以下角色:   抽象工厂(ExportFactory)角色:担任这个角色的是工厂方法模式的核心,任何在模式中创建对象的工厂类必须实现这个接口。在实际的系统中,这个角色也常常使用抽象类实现。  具体工厂(ExportHtmlFactory、ExportPdfFactory)角色:担任这个角色的是实现了抽象工厂接口的具体JAVA类。具体工厂角色含有与业务密切相关的逻辑,并且受到使用者的调用以创建导出类(如:Export

4、StandardHtmlFile)。  抽象导出(ExportFile)角色:工厂方法模式所创建的对象的超类,也就是所有导出类的共同父类或共同拥有的接口。在实际的系统中,这个角色也常常使用抽象类实现。  具体导出(ExportStandardHtmlFile等)角色:这个角色实现了抽象导出(ExportFile)角色所声明的接口,工厂方法模式所创建的每一个对象都是某个具体导出角色的实例。源代码  首先是抽象工厂角色源代码。它声明了一个工厂方法,要求所有的具体工厂角色都实现这个工厂方法。参数type表示导出的格式是哪一种结构,如:导出HTML格式有两种结构,一种是标准结构,一种是财务需

5、要的结构。publicinterfaceExportFactory{publicExportFilefactory(Stringtype);}  具体工厂角色类源代码:publicclassExportHtmlFactoryimplementsExportFactory{@OverridepublicExportFilefactory(Stringtype){//TODOAuto-generatedmethodstubif("standard".equals(type)){returnnewExportStandardHtmlFile();}elseif("financial".eq

6、uals(type)){returnnewExportFinancialHtmlFile();}else{thrownewRuntimeException("没有找到对象");}}}publicclassExportPdfFactoryimplementsExportFactory{@OverridepublicExportFilefactory(Stringtype){//TODOAuto-generatedmethodstubif("standard".equals(type)){returnnewExportStandardPdfFile();}elseif("financia

7、l".equals(type)){returnnewExportFinancialPdfFile();}else{thrownewRuntimeException("没有找到对象");}}}  抽象导出角色类源代码:publicinterfaceExportFile{publicbooleanexport(Stringdata);}  具体导出角色类源代码,通常情况下这个类会有复杂的业务逻辑。publicclassExportFinancialHtmlFi

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。