FACTORY
在程序中,如下写法十分常见:
T2kArea area=new T2kArea(name);
此时,程序依赖于具体类T2kArea,如果具体类发生变化,那么程序中每一处使用如上代码的地方都要修改。所以就要应用Factory模式,使得程序依赖于抽象。
如果具体类是稳定的,那么依赖它就不会出现麻烦。例如创建String对象就不会有问题,应为String不会随时改变。
在软件开发过程中,大多数的类都是会随时改变的,所以程序要依赖于抽象而避免依赖于具体类。
背景:在ipass系统中,Area 对应的是T2k 设备集和N2k子图,因为他们的显示结构不同,又要避免频繁的使用if /else来判断类型,就需要分别建立T2kArea和N2kArea具体类。
例1
IArea接口,但还是依赖了T2kArea和N2kArea具体类。
虽然程序是调用
例2
public interface IAreaFactory {
public IArea createT2kArea();
public IArea createN2kArea();
}
public class AreaFactory implements IAreaFactory {
public IArea createN2kArea() {
return new N2kArea();
}
public IArea createT2kArea() {
return new T2kArea();
}
}
上例中,程序完全依赖于抽象,但如果再添加一种M2kArea,就需要在IAreaFactory,AreaFactory中都要添加方法createM2kArea().
例3
public interface IAreaFactory {
public IArea createArea(String type);
}
public class AreaFactory implements IAreaFactory {
public IArea createArea(String type) {
if (type.equals("t2k")) {
return new T2kArea();
} else {
return new N2kArea();
}
}
}
上例中,createArea(String type) 通过相应的输入参数来构造对应的Area。在程序中有时候可能会有参数输入错误的情况,但如果在单元测试充分的条件下,此问题很容易避免。
例4
上例,可以在不同的数据库后台切换,LdapAreaFactory可以将信息保存在Ldap上,OracleAreaFactory可以将信息保存在Oracle数据库上。应用程序并不知道,也不关心正在使用哪一个工厂实现。
例5
有时候,我们希望能够在完全不使用数据库的情况下测试程序与数据库交互的接口。使用Factory模式可以很容易的模仿数据库的行为,欺骗应用程序。而且它还可以模仿多种现实中很难模拟的数据库失败原因。
上图中,使用EmsText程序来测试Ems,EmsTest实现LdapFactory和Ldap接口。在Ems中保存一个LdapFactory的全局静态变量,在实际使用时,此变量设为LdapFactoryImplementation的引用,在测试时,将此变量设为EmsTest。这样,EmsTest就能欺骗Ems模拟所有的Ldap的操作。(在本例中,可以将Ldap理解为JDBC)。
惨痛的教训:
在ipass系统中,每处连接ldap的地方都是用DirContext ctx=new InitialDirContext();而后,当ipass需要支持多ldap server的时候,需要把每一处这样的代码都改成
DirContext ctx=LDAPContextFactory.getAvailableContext();LDAPContextFactory是用来维护多个ldap的上下文。好在有eclipse的search功能,而且程序各处都是写的DirContext ctx=new InitialDirContext();很容易就批量修改了。
不是任何一个具体类都要应用Factory模式,毕竟一个具体类就要增加一个抽象接口,一个工厂接口,最少一个工厂实现。这样,会使程序的规模成指数级增长。
分享到:
相关推荐
在高中通用技术课程中,对稳固结构的探析是一个重要的学习主题。本课件主要探讨了结构的稳定性及其影响因素,旨在帮助学生理解和设计出更稳固的结构。以下是相关知识点的详细说明: 一、结构的稳定性 结构的稳定性...
根据提供的文件信息,文件标题为“***-中金公司-宋城演艺-300144-演艺龙头护城河稳固,新模式下增长可期.pdf”,描述也是同样的内容。文件标签为“行业”,说明该文件可能与演艺行业的市场分析、企业分析或者行业...
人行道透水砖铺装的设计要求平整度和美观度都很高,而施工过程中也需要确保人行道透水砖铺装的质量。为了提高人行道透水砖铺装的质量,需要对人行道透水砖铺装的平整度和稳固性进行试验和检测。 此外,本文还对提高...
报告中提到的“本地商业王国根基稳固,生态价值有望迎来新增长”是指美团作为中国领先的在线和本地生活服务平台,通过整合用户生活场景中的多种服务,巩固了其业务基础并促进了生态系统的价值增长。报告中还提到了...
游戏设计逐步升级,从挑战速度到挑战难度、稳固度和高度,使孩子们在玩耍中学习和成长。 【知识点】: 1. **体育教育的重要性**:体育活动对于幼儿园中班的孩子来说,不仅能够锻炼身体,还能培养他们的团队合作精神...
20210527-广发证券-百润股份-002568-行业有望迎来新一轮较快增长,公司龙头地位稳固.pdf
新能源汽车行业在2022年5月的表现呈现了明显的复苏态势...未来,随着全球范围内的碳减排目标不断强化,新能源汽车行业将继续保持强劲的增长势头,而那些能够不断创新、适应市场变化的公司将有望在竞争中占据主导地位。
这种稳固结构的钻孔平台施工方法可能引入了新的设计理念或技术,如模块化设计、智能监测系统等,以提升施工效率和安全性。具体创新点需参考“一种稳固结构及基于该稳固结构的钻孔平台施工方法.pdf”文件中的详细内容...
报告中还提到了新能源汽车产业链在补贴下调预期下调整能力的提升,以及产业链格局的稳固促进了行业的发展。具体来说,整车与动力电池企业之间的供应关系结构稳固,有利于产业链内部高效协调与产品调整。 综上所述,...
阿里巴巴-SW(09988)在2020年8月28日发布的1QFY21(2021财年第一季度)业绩报告显示,公司的表现超出市场预期,核心电商业务仍然稳固,展现出强劲的增长动力。该报告由浦银国际分析师编制,对阿里巴巴的财务状况和...
在通信行业中,设备的稳定性与安全性至关重要,而“水杯稳固托盘”这一设计就是针对这一需求而诞生的。它旨在为工作人员提供一个安全、方便的放置水杯的平台,确保在工作过程中避免因水杯倾倒引发的意外,从而保证...
新能源车:5月销量逐步复苏,龙头公司地位稳固.pdf
煎烤器的设计与构造对于烹饪效果和安全使用至关重要,而这种结构稳固的煎烤器无疑为用户提供了更加优质的烹饪体验。 首先,煎烤器的结构稳固性体现在其基础框架上。一个坚固的框架可以确保设备在烹饪过程中不会因...
我国机床市场大而不强,机床产值、机床消费额均位列世界首位,而机床数控化率较低、高端机床依赖进口的问题仍然存在,中低端产品竞争较为充分,而高端机床依赖进口。工业母机是工业现代化的基石,是国家制造业战略...
消防柜1的前端设有活动门,方便取用消防器材,而左右两侧后端中部则设有固定块9,这是连接稳固装置的关键部位。 稳固装置的设计考虑了多方面的稳固措施。左固定板4和右固定板3通过合页13安装在稳固板2的前壁两侧,...
《C安全编码标准:开发安全、可靠、稳固系统的98条规则》是针对C语言编程者的一本权威指南,旨在帮助开发者遵循最佳实践,避免常见的编程陷阱,从而编写出更安全、更稳定、更高效的代码。以下是根据书名和描述所提炼...
中信建投-中国银河(601881)网点触达能力稳固,全新战略有望加速业务短板补强-230529.pdf
标题“联想集团-0992.HK-PC优势稳固,智能化转型带来成长新动能”揭示了联想集团在个人计算机(PC)市场的领先地位以及其正在经历的业务转型,旨在通过智能化战略寻找新的增长动力。这个标题暗示了两方面的关键知识...
港股公司研究-西南证券-网易S09999.HK游戏龙头地位稳固,多元扩展生态边界
在本压缩包“行业文档-设计装置-一种结构稳固魔方.zip”中,主要包含了一份名为“一种结构稳固魔方.pdf”的文档,该文档详细介绍了关于设计一款结构稳固的魔方的相关知识。魔方,作为一种经典的智力玩具,其设计与...