- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计模式案例分析.doc
工厂模式Factory
定义:
定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到其子类。
作用:
扩展性和维持性
考虑这样一个实际应用:实现一个导出数据的应用框架,来让客户选择数据的导出方式,并真正执行数据导出。 在一些实际的企业应用中,一个公司的系统往往分散在很多个不同的地方运行,比如各个分公司或者是门市点,公司没有建立全公司专网的实力,但是又不愿意让业务数据实时的在广域网上传递,一个是考虑数据安全的问题,一个是运行速度的问题。 这种系统通常会有一个折中的方案,那就是各个分公司内运行系统的时候是独立的,是在自己分公司的局域网内运行。然后在每天业务结束的时候,各个分公司会导出自己的业务数据,然后把业务数据打包通过网络传送给总公司,或是专人把数据送到总公司,然后由总公司进行数据导入和核算。 通常这种系统,在导出数据上,会有一些约定的方式,比如导出成:文本格式、数据库备份形式、Excel格式、Xml格式等等。 现在就来考虑实现这样一个应用框架。在继续之前,先来了解一些关于框架的知识。
模式结构和说明
工厂方法模式的结构如图3所示: 图3 工厂方法模式结构示意图
Product: 定义工厂方法所创建的对象的接口,也就是实际需要使用的对象的接口。ConcreteProduct: 具体的Product接口的实现对象。Creator: 创建器,声明工厂方法,工厂方法通常会返回一个Product类型的实例对象,而且多是抽象方法。也可以在Creator里面提供工厂方法的默认实现,让工厂方法返回一个缺省的Product类型的实例对象。ConcreteCreator: 具体的创建器对象,覆盖实现Creator定义的工厂方法,返回具体的Product实例。
工厂方法模式示例代码
(1)先看看Product的定义,示例代码如下:
/**
*工厂方法所创建的对象的接口
*/
public interface Product {
//可以定义Product的属性和方法
} (2)再看看具体的Product的实现对象,示例代码如下:
/**
*具体的Product对象
*/
public class ConcreteProduct implements Product {
//实现Product要求的方法
} (3)接下来看看创建器的定义,示例代码如下:
/**
*创建器,声明工厂方法
*/
public abstract class Creator {
/**
*创建Product的工厂方法
* @return Product对象
*/
protected abstract Product factoryMethod();
/**
*示意方法,实现某些功能的方法
*/
public void someOperation() {
//通常在这些方法实现中,需要调用工厂方法来获取Product对象
Product product = factoryMethod();
}
} (4)再看看具体的创建器实现对象,示例代码如下:
/**
*具体的创建器实现对象
*/
public class ConcreteCreator extends Creator {
protected Product factoryMethod() {
//重定义工厂方法,返回一个具体的Product对象
return new ConcreteProduct();
}
}
使用工厂方法模式来实现示例
要使用工厂方法模式来实现示例,先来按照工厂方法模式的结构,对应出哪些是被创建的Product,哪些是Creator。分析要求实现的功能,导出的文件对象接口ExportFileApi就相当于是Product,而用来实现导出数据的业务功能对象就相当于Creator。把Product和Creator分开过后,就可以分别来实现它们了。 使用工厂模式来实现示例的程序结构如图4所示: 图4 使用工厂模式来实现示例的程序结构示意图 下面一起来看看代码实现。(1)导出的文件对象接口ExportFileApi的实现没有变化,这里就不去赘述了(2
文档评论(0)