|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
前几天同学问我学习方向的问题。有点想法,不知道对不对,怕误导同学,现在“开源一下”。注:括号内是我现在整理的时填加上的。计划 信任良多人都喜好看这部悲剧,我是很喜好,内里包含了发展中的离合悲欢,你在个中能够寻觅你发展的脚印。编程发展之路未尝不是如许的呢?
故事就是从这里入手下手的。
小王是刚卒业的先生,进进一家软件公司,薪水不错。年老人充斥劲头,有着宏大的方针。前三天列入了公司的培训,三天没写代码了,手痒。第四天,项目司理走过去说:“小王,写一个整型链表的排序算法吧,我们在项目中要用。”
冒泡是小王在脑海中第一个出现出来的。打开某某圣经,摘了段冒泡算法,修正了一些代码的誊写作风(有些圣经代码作风不咱的),代码大抵云云:
BOOLSort(ListInt)
{
冒泡排序算法
{
对照语句
}
returnTRUE;
}
小王反省了一下,还用测试用例测试了一把,确保十拿九稳,交给了司理。司理说了句不错,乐坏了小王。
第二天,司理跑过去说:“把你今天的代码改一下,如今要对照浮点型了,另有可否速率上进步一点?”
小王上彀查了一下,选择了疾速排序算法,不忘把今天写的备份了一把,然后在今天函数的基本上改。代码大抵云云:
BOOLSort(ListInt)
{
疾速排序算法
{
对照语句
}
returnTRUE;
}
Easy吗?测试交差。
一年后……
镜头切换……
小王坐在盘算机前纯熟的编写着程序,并且中间还放着本《计划形式》的书。晓得了面向工具编程,晓得了计划形式,但了解还不敷深入。排序算法也演化成对照文件名了。
一日司理过去说:“小王,如今我们的排序算法要用在嵌进式平台中,你做一些算法的研讨事情,给出一份呈报。”
这不是战略形式的典范使用吗?界说一系列的算法,把它们一个个封装起来,而且使他们能够互相转换。
小王画了张UML图:
如许,小王把一些盛行的排序算法都试了一遍,统共有七八种,换一种算法速率也很快,新的算法拔出到体系中,老算法从体系中"退休",完成插件式交换。
CSort*pSort=newCBubbleSort;
CClient.ListSort(pSort);
假如要改成疾速排序,只需云云:
CSort*pSort=newCQuickSort;
CClient.ListSort(pSort);
测试交差,固然司理本人也有设法,又让小王试了别的的几个算法,小王都能轻松的完成。战略形式的感化在这里极尽描摹的发扬了,小王内心出格有成绩感。
过了些日子,客户提出必要按文件名、日期举行排序,小王以为这仍是对照复杂的,变动了一下UML图:
改代码的次要事情是copy-paste,就四个函数,也就很快完成了。
客户的需求是不会中断的,为了增强功效,提出必要按文件巨细、文件的范例排序,天晓得客户还会提出甚么请求。
“不再能如许活”,小王听着歌,堕入了寻思。
“排序的算法和对照算法分隔来会怎样呢?把它们脱耦,使得两者能够自力地变更。这句话怎样这么熟习,我一定在那里看到过。”小王忙打开《计划形式》,入手下手查阅。
“Gotit,这不就是桥梁形式(Bridge)。”一阵欣喜,即刻就干。半个小时后,UML图出来了,以下:
客户端代码以下:
CSort*pSort=newCQuickSort;
CCompareType*pType=newCNameCompare;
pSort->SetType(pType);
pSort->Sort(pList);
哈哈,客户们,你们只管提纲求吧。
Java欺骗了我们那么多年,如今的多核时代,我认为它气数已尽! |
|