课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
设计模式的学习与应用一直以来都是大多数软件开发程序员都需要重点学习的一个编程知识,而本文我们就通过案例分析来简单了解一下,设计模式应用场景与优势分析。
一、什么时候使用什么模式?
解决特定问题的佳实践。显然解决问题A的佳实践往往并不能解决问题B,至少不会是解决问题B的佳实践,那么我想这里至少要面临两个问题:
某种设计模式解决的是什么问题?
我的问题等于某种设计模式解决的问题吗?
得到了上面两个问题的答案后,接下来的才是设计模式如何解决我的问题。
这两个问题是以我的思路提出来的,同时我也觉得这是两个很糟糕的问题,下面我会做说明。
我并不建议新手直接学习如何使用各种设计模式,比如那23种。学习的结果往往是掌握了如何用编程语言实现某种设计模式,却对该设计模式解决了什么问题没有深刻的印象。这种先入为主会让学者觉得设计模式很简单,然后在实际的开发中为了使用模式而使用,并没有解决实际的问题。因为我是这么干的,所以觉得有更好的方式。
一个建议是,在新手阶段,按这个步骤去学习设计模式:
多花点时间去了解软件设计上有哪些常见的设计问题、疑难杂症
哪些问题已经有了佳实践的解决方案,或者说设计模式,哪些还没有
深入体会设计模式解决该问题的过程,好能亲身参与该过程
这个思路是先有问题后有模式,大脑中形成的思路是通过问题检索模式,而不是孤立的模式,或者是模式检索问题的回路。
到这里我们在看一下上面两个问题,是一种拿着答案找问题的思路。实际的场景应该拿着问题找答案。我们重新调整一下:
我要解决的问题是什么?
我的问题是否等于已经存在的问题A
是否有解决问题A的设计模式
通过学习有哪些常见的设计问题以及对应的模式,我们也只能回答问题3。
而问题1和问题2跟设计模式没有任何关系,却是能不能应用某种设计模式的一步。这也是导致设计模式滥用的根源,同时也是很多人放弃设计模式的原因。
关于如何去回答这两个问题,小弟暂时没法给大家解答。分析问题的能力,可能需要时间的积累吧。
二、设计模式的牢笼
设计模式按解决特定问题的佳实践来定义本身没有错,但往往有人陷进了设计模式的牢笼。
以GoF设计模式为例,虽然那23中设计模式是由比你我更加聪明的程序员总结出来的,但使用它们也不是没有代价的。
设计模式不是现成的代码,它不像类库可以直接使用
设计模式大都是解决代码扩展性的问题,但这里的扩展性真的是你需要的吗,是不是过度设计
设计模式提升扩展性的方式往往是增加抽象,这就牺牲了简单性
三、学习设计模式的好处
虽然设计模式不是银弹,掌握设计模式也不一定能帮你解决你正面临的问题,但学习一下设计模式对你的软件开发工作还是大有裨益的,就算你永远不使用它。
如果不忽悠下读者学这个还是有点用的,那写后续的系列文章意义在哪......
1.应对面试中的设计模式相关问题
就很直接,如果你是被面试的,被问到的概率不低;如果你面试别人,可以用来考察下候选人的理解程度。
2.让读源码、学框架事半功倍
优秀的开源项目中类的个数都会比较多,类结构、类之间的关系极其复杂,常常调用来调用去。为了保证代码的扩展性,代码中会使用到很多设计模式,当然也不排除作者秀的嫌疑,但是如果你不懂设计模式,看开源代码经常摸不着作者的设计思路,看起来找不到北。
3.为你的职场发展做铺垫
公司里面codereview,你连几个设计模式都说不出来,一看就不是“大牛”,嗯,就是这样的。
4.提升你的代码设计能力
这一点要看造化,但这是客观存在的,你总会遇到需要设计复杂系统的时候,早接触早准备。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。