总结下我所学 设计模式
╮(╯▽╰)╭,,,.... 未必正确. 初学者慎重,本文系个人看法. 勿轻易接受.
从听说-接触-学习.快半年了吧....
自己感觉设计模式精华在于 一个解耦合的过程,不必强记,..尽管当时我通读完了
<大话设计模式>和老外的<head first 设计模式>,.之后有段时间在傻记. o(╯□╰)o....
看到很多人在讲设计模式好处时说 >设计模式可以减少代码量啊,.减少重复代码..
减少劳动量啊啥的....恕在下不敢苟同.,..
我的理解是设计模式旨在运用一种思想,是前人总结出来的一种在程序中用于分离所描述事物中
的可能存在变化的情况的一种通用解决方案.称之为模式. 当然这些是基于面向对象语言的三大特性
基础之上的,(继承 多态 封装). 我认为好处在于 使得程序内部模块松耦合)①).从类的角度看高内聚(②).可协作编程.
最重要的是增强程序应对可能发生的变化的能力.(③)/对于日后产品升级,有非常大的好处.
面向对象语言三大特性之一:
封装:相对过程式语言来讲,
继承:
多态:
设计模式几大基本原则:
1..开放封闭原则(Open-Closed Principle): "对于扩展是开放的,对于修改是关闭的",但是不大可能完全封闭,一个好的设计是在不修改源代码的情况下,可以扩展功能..而实现开闭原则的关键就是抽象出超类接口,以隔离可能发生的变化. 在"开-闭"原则中,允许扩展具体的实现类,抽象类和接口在"开-闭"原则中扮演着极其重要的角色...即要预知可能变化的需求.又预见所有可能已知的扩展...抽象是关键!-------但是对于一个新的问题,如何提取出抽象来隔离这些变化呢? (遗留问题).
2.里氏代换原则(Liskov Substitution Principle LSP):
这是一个女人最先提出来的.对于这个原则,我们有一点可以确定,;那就是-->她老公是姓"里 ",(英文好像是Liskov ).而且她老人家提出来的:"一个软件实体如果使用的是一个基类的话那么一定适用于其子类,而且它察觉不出基类对象和子类对象的区别。也就是说,在软件里面,把基类都替换成它的子类,程序的行为没有变化。".这个应该是在真正的面向对象语言出现之前提出来的指导思想.! 要不然这么个东西怎么好意思说出口..!本来就是人家面向对象语言的特性之一.
3. 依赖倒转原则:
要依赖抽象,而不要依赖具体的实现..如果说开闭原则是目标,依赖倒转原则是到达"开闭"原则的手段..要达到松耦合的设计目标,就应该尽量的遵守依赖倒转原则.以使得程序间的相互依赖减少.依赖倒转原则就是要求将类"抽象化"以隔离变化的影响!!
4.迪米特法则(这个跟<head first 设计模式>里的最少知识原则好像是一个意思):
系统中的类,尽量不要与其他类互相作用,减少类之间的耦合度,因为在你的系统中,扩展的时候,你可能需要修改这些类,而类与类之间的关系,决定了修改的复杂度,相互作用越多,则修改难度就越大,反之,如果相互作用的越小,则修改起来的难度就越小..
当然也不是仅局限于修改啦,上面的话有缺陷... 当一个类与很多类出现直接联系的时候,这个类或者是类库的可复用性也就大大的降低了,lon余(他妈的这个字打不出来.见笑),和耦合度大大增加,...也就成了我等鸟辈写的代码了.....
5.接口隔离法则:
这个法则与迪米特法则是相通的,迪米特法则是目的,而接口隔离法则是对迪米特法则的规范..为了做到尽可能小的耦合性,我们需要使用接口来规范类,用接口来约束类.要达到迪米特法则的要求/松耦合的设计--->使用接口隔离法则.
注释 :
①":松耦合:松耦合架构降低整体复杂性和依赖性。松耦合使应用程序环境更敏捷,能更快地适应更改,并且降低了风险。除此之外,系统维护也更方便
②:高内聚:衡量模块独立性的定性标准是内聚(一个模块内各个元素彼此结合的紧密程度)
③:运用上面所述的:
1.开放封闭原则(Open-Closed Principle),
2.里氏代换原则(Liskov Substitution Principle LSP):3. 依赖倒转原则:....
以应对需求变更.环境变更等变化.....
到睡觉时间了.洗个澡,睡觉! 明天七点起来跑步.
出处: http://www.cnblogs.com/todototry/
关注语言: python、javascript(node.js)、objective-C、java、R、C++
兴趣点: 互联网、大数据技术、大数据IO瓶颈、col-oriented DB、Key-Value DB、数据挖掘、模式识别、deep learning、开发与成本管理
产品:
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架