热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

七大设计原则(笔记)

1.单一职责原则       一个类、接口方法只负责一项职责,这样能降低类的复杂度,提高类的可读性,提高可维护性,降低修改带来的风险。在实际项目中,很多类不遵循单一职责原则,但是接





1.单一职责原则


       一个类、接口方法只负责一项职责,这样能降低类的复杂度,提高类的可读性,提高可维护性,降低修改带来的风险。在实际项目中,很多类不遵循单一职责原则,但是接口和方法要做到单一职责。


2.接口隔离原则


       用多个专门的接口而不使用单一的总接口,客户端不应该依赖它不需要的接口。也就是说一个类对另一个类的依赖应该建立在最小的接口上,尽量细化接口,减少接口中的方法,但是一定要注意适度的原则,过分细化接口会带来复杂度。


3.依赖倒转原则


       依赖倒置原则定义:高层模块不应该依赖底层模块,二者都应该依赖其抽象。也就是说针对接口编程,不要针对实现编程,针对接口编程包括使用接口或抽象类,这样可以使得各个模块彼此独立,降低模块间的耦合性。而且在实现类中尽量不发生直接的依赖关系,依赖关系通过接口或抽象类产生。


4.里氏替换原则


       子类替换父类,程序逻辑不变。里氏替换原则约束了继承,继承在程序设计中能够复用代码但是对程序是有入侵的,因为子类默认就拥有父类的行为,而且增加了耦合。

       在继承中如何遵守里氏替换原则?首先子类可以扩展父类的功能,但不能改变原有的功能,子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法,如果重写了,那么用子类替换父类时,程序会调用子类的方法(否则重写就没有意义了),也就导致程序的行为发生变化。使用里氏替换原则,可以避免子类重写父类的方法,降低代码出错的可能性。


5.开闭原则


       一个软件实体(如类、模块、函数)应该对扩展开放、对修改关闭。

       开闭原则的含义其实是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现。在项目中需求变更是非常常见的,如果我们频繁修改原有的代码会增加系统的复杂度,增加项目的风险。使用开闭原则可以提高系统的可复用性及可维护性,具体做法就是用抽象构建框架,用实现扩展细节。


6.迪米特法则(最少知道原则)


       一个对象应该对其他对象保持最少的了解。简单讲就是只和朋友交流,不和陌生人说话,朋友指的是出现在成员变量、方法输入、方法输出中的类,但是出现在方法内部的类不属于朋友。不应该和这样的类发生关系。就是每个类完成自己的方法,让别的类去调用。


7.合成复用原则


       尽量使用对象的组合/聚合,而不是继承关系达到软件复用的目的。

       组合是contains-a的关系,比如一个人的手、脚就是组合关系,这是一种强关系,其中一部分不存在了,所有的都不存在了,聚合是has-a的关系,是一种弱的关系,比如人手里拿着的剑。尽量使用组合/聚合来实现软件复用并不是说抛弃继承,如果两个实体是is-a的关系时,可以使用继承。


推荐阅读
  • Java面向对象编程深入解析
    本文详细探讨了Java中的关键字static、单例模式、main()方法、代码块、final关键字、抽象类与方法、模板方法设计模式、接口、内部类等内容,旨在帮助读者深入理解和掌握Java面向对象编程的核心概念。 ... [详细]
  • 开发笔记:哈希的应用
    开发笔记:哈希的应用 ... [详细]
  • 精选Unity开源项目:UniRx实现响应式编程
    本文介绍了Unity中的响应式编程框架——UniRx,探讨了其在解决异步编程难题中的应用及优势。 ... [详细]
  • Elasticsearch集群构建指南:本地环境搭建与管理
    本文详细介绍了如何在本地环境中搭建Elasticsearch集群,包括节点配置、主节点选举机制、以及如何通过单播和广播方式增加节点。同时,文章还探讨了集群的高可用性和扩展性,以及如何通过配置防止脑裂现象的发生。 ... [详细]
  • 本文详细介绍了如何在iPhone 6上设置3G和4G网络的方法,包括具体的步骤和可能遇到的问题解决方案。 ... [详细]
  • 本文提供了一套实用的方法论,旨在帮助开发者构建能够应对高并发请求且易于扩展的Web服务。内容涵盖了服务器架构、数据库管理、缓存策略以及异步处理等多个方面。 ... [详细]
  • .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了
    .NETCore中的一个接口多种实现的依赖注入与动态选择看这篇就够了最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式,为了灵活我在依赖注入的 ... [详细]
  • python爬虫Demo
    1爬虫功能:爬取某域名下所有网页,比如爬取python文档 https:docs.python.orgzh-cn3 ,爬取之后, ... [详细]
  • 本文介绍了如何在VB.NET版机房收费系统中实现数据从DataGridView导出至Excel的功能,包括环境配置、代码实现及常见问题解决方法。 ... [详细]
  • php如何更改编码格式?
    php如何更改编码格式? ... [详细]
  • 本文详细介绍了SketchUp中多种实用插件,帮助用户提升设计效率和作品质量。 ... [详细]
  • 本文详细介绍了如何通过修改Lua源码或使用动态链接库(DLL)的方式实现Lua与C++之间的高级交互,包括如何编译Lua源码、添加自定义API以及在C++中加载和调用Lua脚本。 ... [详细]
  • 深入理解Kafka架构
    本文将详细介绍Kafka的内部工作机制,包括其工作流程、文件存储机制、生产者与消费者的具体实现,以及如何通过高效读写技术和Zookeeper支持来确保系统的高性能和稳定性。 ... [详细]
  • 58同城的Elasticsearch应用与平台构建实践
    本文由58同城高级架构师于伯伟分享,由陈树昌编辑整理,内容源自DataFunTalk。文章探讨了Elasticsearch作为分布式搜索和分析引擎的应用,特别是在58同城的实施案例,包括集群优化、典型应用实例及自动化平台建设等方面。 ... [详细]
  • 本文介绍了ThinkPHP框架的基本概念及其主要特性。作为一款遵循Apache许可证的开源框架,ThinkPHP不仅支持多种平台和Web服务器,还提供了丰富的功能以适应不同的开发需求。 ... [详细]
author-avatar
殇子休
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有