欢迎来到天天文库
浏览记录
ID:43611073
大小:614.01 KB
页数:37页
时间:2019-10-11
《设计模式案例分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、工厂模式Factory定义:定义一个川于创建对象的接口,让子类决定实例化哪一个类,FactoryMethod使一个类的实例化延迟到其子类。作用:扩展性和维持性应用场景考虑这样一个实际应用:实现一个导出数据的应用梅架,来让客户选择数据的导出方式,并其正执行数据导出。在一些实际的企业应用中,一个公司的系统往往分散在很多个不同的地方运行,比如各个分公司或者是门市点,公司没有建立全公司专网的实力,但是乂不愿意让业务数据实时的在广域网上传递,一个是考虑数据安全的问题,一个是运行速度的问题。这种系统通常会有一个折中的方案,那就是各个分公司内运行系统的时候是独立的,是在自己分公司的局
2、域网内运行。然后在每天业务结束的时候,各个分公司会导出自己的业务数据,然后把业务数据打包通过网络传送给总公司,或是专人把数据送到总公司,然后由总公司进行数据导入和核算。通常这种系统,在导出数据上,会有一些约定的方式,比如导出成:文本格式、数据库备份形式、Excel格式、Xml格式等等。现在就來考虑实现这样一个应用框架。在继续之前,先來了解一•些关于框架的知识。模式结构和说明工厂方法模式的结构如图3所示:CreatQrthod():Product味-O+someOperation():voidProduct:定义工厂方法所创建的对象的接口,也就是实际需耍使用的对象的接口。
3、ConcreteProduct:具体的Product接口的实现对象。Creator:创建器,声明工厂方法,工厂方法通常会返回一•个Product类型的实例对彖,而且多是抽彖方法。也可以在Creator里而提供工厂方法的默认实现,让工厂方法返回一个缺省的Product类型的实例对彖。ConcreteCreator:具体的创建器对彖,覆盖实现Creator定义的工厂方法,返冋具体的Product实例。工厂方法模式示例代码(1)先看看Product的定义,示例代码如卞:★工厂方法所创建的对象的接口7publicinterfaceProduct{〃可以定义Product的属性和
4、方法}(2)再看看具体的Product的实现对象,示例代码如下:/创建器,声明工厂方法7publicabstractclassCreator{/**★创建Product的工厂方法*@returnProduct对象*/*具体的Product对象7publicclassConcreteProductimplementsProduct{〃实现Product要求的方法}(3)接下來看看创建器的定义,示例代码如下:protectedabstractProductfactoryMethod();y**水示意方法,实现某些功能的方法7publicvoidsomeOperation()
5、{〃通常在这些方法实现中,需要调用工厂方法來获取Product对象Productproduct=factoryMethod();}}(4)再看看具体的创建器实现刈豫,示例代码如下:★具体的创建器实现对象*/publicclassConcreteCreatorextendsCreator{protectedProductfactoryMethod(){〃重定义工厂方法,返回一个具体的Product对象returnnewConcreteProduct();}}使用工厂方法模式来实现示例婆使用工厂方法模式来实现示例,先来按照工厂方法模式的结构,对应出哪些是被创建的Produc
6、t,哪些是Creator。分析要求实现的功能,导出的文件对象接口ExportFileApi就和当丁•是Product,而用来实现导出数据的业务功能对象就相当于Creatoro把Product和Creator分开过后,就可以分别来实现它们了。使用工厂模式來实现示例的程序结构如图4所示:图4使用工厂模式來实现示例的程序结构示意图下而-•起來看看代码实现。(1)导出的文件对象接口ExportFileApi的实现没有变化,这里就不去赘述了(2)接下来看看接口ExportFileApi的实现,为了示例简单,只实现导出文木文件格式和数据库备份文件两种。先看看导出文本文件格式的实现,
7、示例代码如下:罟出成文本文件格式的对彖*/publicclassExportTxtFileimplementsExportFileApi{publicbooleanexport(Stringdata){〃简单示意一下,这里需要操作文件System.oS.println(”导出数据"+data+”到文本文件,');returntrue;}}再看看导出成数据库备份文件形式的对象的实现,示例代码如K:匕导出成数据库备份文件形式的对喙7publicclassExportDBimplementsExportFileApi{publicboolean
此文档下载收益归作者所有