TEMPLATE METHOD
该模式将通用的算法放在基类中,通过继承在不同的具体类中实现该通用算法,此模式的代价是派生类必定与基类绑定在一起。
在ipass项目中,有从文件导入的功能。首先打开文件,按照csv格式逐行处理,对于不合格的过滤掉,合格的保存起来,最后在界面上显示,再由用户决定是否执行导入功能。
public abstract class BaseImporter {
List list = new ArrayList();
public void openFile(String filename) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(filename)));
String newline;
while ((newline = br.readLine()) != null) {
Object o = valid(newline);
if (o != null) {
list.add(o);
}
}
}
public Object[] getImportInfo(){
return list.toArray();
}
public abstract Object valid(String l ine);
}
public class UserImporter extends BaseImporter {
public Object valid(String line) {
String[] info=CVSParser.parse(line);
//invalid
if(info.length!=2) {
return null;
}
return new UserImportInfo(info);
}
}
每个导入页面生成自己需要的Importer,调用openFile方法,即可获取到合适的内容。
STRATEGY
该模式使用委托来实现算法的重用。将通用的算法放在具体类中,通用算法要调用的抽象方法定义在接口中,派生类实现此接口来实现具体的业务。
下图中,实现的是批量导入的功能,上例是导入到页面显示,本例为导入到后台。由于导入的元素个数太多,一次全导入无法实现,一次一个又太浪费资源,现在计划是一次导入300个。批量导入的算法在BatchImporter这个具体类中实现,它调用ImportHandler的importOperation()抽象方法实现具体的导入业务。UserImportPage和GroupImportPage分别是导入用户的页面和导入组的页面,它们都实现了ImportHandler接口,在importOperation方法中实现自己的导入操作的业务逻辑。同时它们自身也保留BatchImporter实例,当特定的事件激活时(如按下导入按钮),执行BatchImporter.doImport()进行导入操作。BatchImporter要做的具体工作都委托给ImportHandler的派生类去做。

public class BatchImporter {
int sendTimes;//how many times needs
int total; //total number of objects to import
int skip=300; //import 300 objects each time
ImportHandler hander;
public BatchImporter(int total, ImportHandler handler) {
this.hander = handler;
this.total = total;
sendTimes = total / skip;
if (total % skip > 0) {
sendTimes++;
}
}
public void doImport() {
for (int i = 0; i < sendTimes; i++) {
//import sendNumber objects this time
int sendNumber = skip;
if (i == sendTimes - 1) {
skip = total - i * skip;
}
//import from the position skip, and import sendNumber objects
hander.importOperation(i * skip, sendNumber);
}
}
}
Strategy允许每个具体实现都可以被不同的通用算法操纵,比Template Method具有更大的自由度,它减小了通用算法和具体细节之间的耦合。但是比继承要付出更多的运行时间和数据空间的开销。
分享到:
相关推荐
根据提供的文件信息,文件标题为“***-中金公司-宋城演艺-300144-演艺龙头护城河稳固,新模式下增长可期.pdf”,描述也是同样的内容。文件标签为“行业”,说明该文件可能与演艺行业的市场分析、企业分析或者行业...
"提高人行道透水砖铺装平整度稳固性试验合格率" 本文总结了提高人行道透水砖铺装平整度稳固性试验合格率的相关知识点。通过对人行道透水砖铺装平整度稳固性试验合格率的分析和研究,得出了提高人行道透水砖铺装平整...
报告中提到的“本地商业王国根基稳固,生态价值有望迎来新增长”是指美团作为中国领先的在线和本地生活服务平台,通过整合用户生活场景中的多种服务,巩固了其业务基础并促进了生态系统的价值增长。报告中还提到了...
20210527-广发证券-百润股份-002568-行业有望迎来新一轮较快增长,公司龙头地位稳固.pdf
黄金列表法(The Goldlist method)是一种针对语言学习者而设计的记忆技巧,特别适用于学习外语词汇。这种方法由大卫·詹姆斯(David James),在多语言学习者社群中被称为Uncle Davey的人所创。黄金列表法基于人的...
新能源汽车行业在2022年5月的表现呈现了明显的复苏态势...未来,随着全球范围内的碳减排目标不断强化,新能源汽车行业将继续保持强劲的增长势头,而那些能够不断创新、适应市场变化的公司将有望在竞争中占据主导地位。
这种稳固结构的钻孔平台施工方法可能引入了新的设计理念或技术,如模块化设计、智能监测系统等,以提升施工效率和安全性。具体创新点需参考“一种稳固结构及基于该稳固结构的钻孔平台施工方法.pdf”文件中的详细内容...
报告中还提到了新能源汽车产业链在补贴下调预期下调整能力的提升,以及产业链格局的稳固促进了行业的发展。具体来说,整车与动力电池企业之间的供应关系结构稳固,有利于产业链内部高效协调与产品调整。 综上所述,...
我国机床市场大而不强,机床产值、机床消费额均位列世界首位,而机床数控化率较低、高端机床依赖进口的问题仍然存在,中低端产品竞争较为充分,而高端机床依赖进口。工业母机是工业现代化的基石,是国家制造业战略...
稳固板的前壁设有放置槽,挡块正好安装其中,而上固定板的后壁两端设有连接块,与稳固板前壁的滑槽相配合。滑槽内设有滑轨和滑块,滑块通过滑轨块与滑轨连接,并在滑块前壁两端设有其次连接块。上固定板能够通过插杆...
在通信行业中,设备的稳定性与安全性至关重要,而“水杯稳固托盘”这一设计就是针对这一需求而诞生的。它旨在为工作人员提供一个安全、方便的放置水杯的平台,确保在工作过程中避免因水杯倾倒引发的意外,从而保证...
煎烤器的设计与构造对于烹饪效果和安全使用至关重要,而这种结构稳固的煎烤器无疑为用户提供了更加优质的烹饪体验。 首先,煎烤器的结构稳固性体现在其基础框架上。一个坚固的框架可以确保设备在烹饪过程中不会因...
中信建投-中国银河(601881)网点触达能力稳固,全新战略有望加速业务短板补强-230529.pdf
新能源车:5月销量逐步复苏,龙头公司地位稳固.pdf
食品饮料行业深度报告:双十一电商渠道分析,龙头优势稳固,细分领域新品牌异军突起-开源证券-20201116.pdf
标题“联想集团-0992.HK-PC优势稳固,智能化转型带来成长新动能”揭示了联想集团在个人计算机(PC)市场的领先地位以及其正在经历的业务转型,旨在通过智能化战略寻找新的增长动力。这个标题暗示了两方面的关键知识...
《C安全编码标准:开发安全、可靠、稳固系统的98条规则》是针对C语言编程者的一本权威指南,旨在帮助开发者遵循最佳实践,避免常见的编程陷阱,从而编写出更安全、更稳定、更高效的代码。以下是根据书名和描述所提炼...
在本压缩包“行业文档-设计装置-一种结构稳固魔方.zip”中,主要包含了一份名为“一种结构稳固魔方.pdf”的文档,该文档详细介绍了关于设计一款结构稳固的魔方的相关知识。魔方,作为一种经典的智力玩具,其设计与...
港股公司研究-西南证券-网易S09999.HK游戏龙头地位稳固,多元扩展生态边界
食品饮料行业深度报告:双十一电商渠道分析,龙头优势稳固,细分领域新品牌异军突起-开源证券-20201116.zip