`
hellogood
  • 浏览: 10603 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

设计模式杂谈

 
阅读更多
一、“舍离断”SOLID的历史
根据WIKI和谷歌搜索,早在1995年,Bob大叔就在新闻组中提出了单职、开闭、里氏替换、接口隔离和依赖倒置,并且在2006年的《C#敏捷原则、模式和实践》中对其进行了完整阐述。然后Michael Feathers大神将它缩写成方便记忆的SOLID。SOLID是面向对象编程和设计的五项基本原则。使用SOLID原则,能提供管理依赖的准则化方式,并且夯实了设计模式的面向对象基础,使得代码变得灵活、可靠和重用。
对于SOLID的初步理解,就是每个原则各一句话的阐释,先通读一遍吧,至于如何理解其真实涵义,我们先“延时加载”一下。
SRP: 单一职责原则,一个类有且仅有一个导致其修改的原因。
OCP:开放封闭原则,软件实体应该对扩展开放,而对修改封闭。
LSP: 里氏替换原则,继承类的实例在他们的父类类型上,必须可以相互替换。
ISP: 接口隔离原则 ,为特定客户提供最小的精细化管理的接口。
DIP: 依赖倒置原则 ,实现依赖于抽象,而不是抽象依赖于实现。

三、总结
舍离断:“舍去多余的事物;脱离对物品的执着;断绝不需要的东西”。
SRP教会我们内修其身,舍去多余的概念,保持一份纯真。SRP是最简单的原则,但是“有几人能不纠缠”。如果五项基本原则中,选择最重要的,那么我还是选择SRP,你可以忘记其他原则,但你不能忘记SRP原则。有了SRP原则,那就是有了把程序媛妹子的利器。
OCP教会我们看穿事物的本质,提取其抽象。以抽象之不变应付具体之万变。脱离并看穿对具体实现的执着,以抽象来提升自己的视角。
LSP教会我们要“知行合一”、“ 言行一致”,“ 知”乃抽象的约定,“行”乃具体的行为。既然说了“能飞”,那就不能“装聋作哑或者事出有因说飞不了”。
ISP教会我们要对外接口也要职责单一,要为不同客户提供不同的最小化接口。实际上这个在安全考量中,就是权限最小化原则的一种体现。
DIP则是在子系统内部分层时,如果需要在不同层次之间提供扩展能力,各层之间必须都依赖于彼此的抽象,而不是依赖于具体的实现。
舍弃多种职责,内修自身;构建继承层次结构,提供灵活的扩展能力;父子继承关系有一说一不含糊;脱离对具体事务的执着,看到其本质的抽象。抽象也要保持单纯,一种客户提供一种抽象,彼此隔离。
“舍去什么得自然,出离什么可心安,什么又可以斩断,自观,自观,自观,自观,不坐仙山,不坐禅”。

分享到:
评论

相关推荐

    程序设计经验杂谈,程序设计,经验杂谈

    这里,我们将深入探讨程序设计的各个方面,包括但不限于设计模式、算法应用、调试技巧、版本控制、代码规范以及项目管理。 首先,设计模式是程序设计中的精髓,它们是经过实践验证的解决方案模板,可以用来解决常见...

    程序设计经验杂谈

    良好的设计模式如工厂模式、单例模式、观察者模式等,能够在不同的场景下提供解决方案模板,使代码更加灵活。 另外,版本控制工具如Git的使用是现代软件开发的必备技能。它可以帮助团队协作,追踪代码历史,解决...

    程序设计经验杂谈.chm

    11. **最佳实践**:编程规范、代码风格、性能优化、软件设计模式等实践性内容,有助于提高代码质量。 12. **C++11及更新版本**:可能讨论了C++11、C++14、C++17引入的新特性,如lambda表达式、右值引用、自动类型...

    程序设计杂谈第三版

    此外,通过采用诸如Builder模式等设计模式,可以有效地管理对象的创建过程,确保对象始终处于一个合法状态。最后,合理的日志记录机制也是不可或缺的一部分,它能够在出现问题时帮助开发者快速定位问题根源。

    Idecade_21世纪设计杂谈页.pdf

    技术提供了功能和服务,商业模式决定了市场策略和盈利方式,而设计则关注如何将这些功能和服务以最具吸引力的方式呈现给消费者,涵盖了产品的外观、交互界面、社会象征意义、情感吸引力以及用户体验。 回顾100年前...

    地产杂谈系列之二十四:新发展模式探索之美日房企经营启示(2022)(17页).pdf

    其通过精准客户定位、个性化设计和供应链管理,优化了产品和服务,同时通过合理的土地期权策略,降低了资产负债率,增强了财务安全性。 报告中的启示强调了房企在行业下行期应注重现金流管理,选择性进行收并购,...

    Spring杂谈

    IoC是一种设计模式,它的主要目的是降低代码之间的耦合度。通过IoC,对象的创建和依赖关系的维护转交给外部容器来管理,而不是由对象自身来控制。DI是实现IoC的一种方式,即通过构造函数、工厂方法或者属性的setter...

    PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用

    然而,过多的参数可能导致记忆负担,因此在可能的情况下,应尽量避免增加参数,考虑其他设计模式,如使用对象或上下文来传递信息。 相反,`Remove Parameter` 是在函数不再需要某个参数时进行的重构,目的是减少...

    java与模式 阎宏

    以东方人的思想讲述Java的设计模式,通俗易懂,讲解到位,值得一读。

    SOA 杂谈 深入

    SOA,即面向服务的架构,是一种设计模式,它强调将企业应用程序构建为可重用的服务集合,以便能够灵活响应业务需求的变化。这种模式的核心理念是通过服务的松耦合和标准化接口,实现系统的模块化和可互操作性。 1. ...

    软件工程历史杂谈-杨东屏

    它涵盖了程序设计语言、数据库技术、软件开发工具、系统平台、标准制定以及设计模式等多个方面。 - **软件名称的由来**:软件一词的诞生与硬件相对应,硬件是指计算机系统中的物理设备,如CPU、内存等,而软件则是指...

    单片机低功耗设计杂谈

    本文将围绕单片机低功耗设计进行探讨,包括降低系统功耗的方法、功耗比较、休眠模式的应用及注意事项、节能器件的介绍等。 首先,降低系统功耗可以从软件和硬件两个方面入手。硬件设计上,可以选用低功耗的芯片,...

    杂谈单片机低功耗设计

    目前,有许多单片机应用领域,都是用电池供电,节能成为设计工程师普遍关心的问题。  进入掉电模式现在有很多的低功耗的片子,特别是在进入掉电模式之后,只有1uA的电流。也可以使用电源管理的方法,在不工作的...

    leetcode中国-blog:我是HanpengChen,公众号【前端极客技术】。这里是我自己博客网站的仓库,主要包括前端、算法、设计模式等

    leetcode中国 Hanpeng Chen's ...设计模式 LeetCode系列 Python 机器学习 大数据 技术杂谈 最后 如果有疑问或者发现错误,可以提issue进行提问或勘误。 欢迎关注公众号 前端极客技术 一起学习成长!

    oracle BIEE BI概念杂谈

    5. **主管信息系统(EIS, Executive Information System)**:EIS是为高层管理人员设计的,提供定制化的、易于理解的信息视图,帮助他们快速做出决策。这些系统通常包含预配置的分析模型,如财务分析,以简化复杂的...

    service mesh杂谈.pptx

    然而,这也带来了新的挑战,如网络通信的性能损失、服务器资源的增加以及接口设计的复杂性。因此,在实施Service Mesh时,需要根据具体业务场景和技术栈进行权衡,选择合适的架构模式和通信协议。

Global site tag (gtag.js) - Google Analytics