热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

面向对象设计的六大原则

前言面向对象的三大特性:封装、继承、多态面向对象的四大好处:可维护、可扩展、可复用、灵活性好面向对象的六大基本原则是设计模式的基础一、单一职责原则1、概念:一个类,应该仅有一个引起它变化的原因。2、描

前言

面向对象的三大特性:封装、继承、多态

面向对象的四大好处:可维护、可扩展、可复用、灵活性好

面向对象的六大基本原则是设计模式的基础


一、单一职责原则

1、概念:一个类,应该仅有一个引起它变化的原因。

2、描述:如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其它职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会受到意想不到的破坏。

3、举例:内存坏了,只用换内存条,不用考虑CPU

一句话:不要往一个类里塞过多功能


二、开闭原则

1、概念:软件实体(类、模块、函数等)应该可以扩展,但是不可修改。

2、描述:在你设计的时候,时刻要考虑,尽量让这个类足够好,写好了就不要去修改,如果有新需求,增加一些类就好了,原来的代码能不动就不动。

3、举例:内存不够,加内存条,而不是修改原先内存条容量

一句话:开放的是扩展,封闭的是修改


三、依赖倒转原则

1、概念:高层模块不应该依赖低层模块,两个都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象

                 

2、描述:面向过程开发时,为了使得常用代码可以复用,一般把这些常用代码写成函数,实现其它功能时,就可调用这些低层函数。也就是高层模块依赖低层模块。例如:可以把访问数据库操作做成低层函数,那么问题来了,当客户希望访问不同的数据库时,就麻烦了,因为高层模块与低层的访问数据库绑定在一起,没办法复用高层模块。

3、举例:如果CPU、内存都依赖具体的主板,那么主板一坏,换其它类型的主板也不能用

一句话:针对接口(或抽象类)编织,不要对具体实现编程


四、里氏代换原则

1、概念:子类型必须能够替换掉它们的父类型

2、描述:一个软件实体如果使用的是一个父类的话,那么一定适用于子类,而它察觉不出父类对象和子类对象的区别。子类可以以父类的身份出现。

一句话:子类可以以父类的身份出现


五、迪米特原则

1、概念:也叫最少知道原则。如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法,可以通过第三者转发这个调用。

2、描述:在类的结构设计上,每一个类都应当尽量降低成员的访问权限。不需要别的类知道的成员或方法就不要公开。类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。

一句话:强调类之间的松耦合,对别人少说话


六、接口隔离原则

1、概念:客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上。

2、描述:使用多个专用接口比使用单一的总接要好。如鱼和人两个类,鱼有游泳和腮呼吸两个动作,人有走路和吃饭两个动作,这些动作不能写在一个接口里面,要拆成专门对鱼和人的两个接口才好。

一句话:多个专用接口要好于单一总接口




推荐阅读
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 探索电路与系统的起源与发展
    本文回顾了电路与系统的发展历程,从电的早期发现到现代电子器件的应用。文章不仅涵盖了基础理论和关键发明,还探讨了这一学科对计算机、人工智能及物联网等领域的深远影响。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文将介绍由密歇根大学Charles Severance教授主讲的顶级Python入门系列课程,该课程广受好评,被誉为Python学习的最佳选择。通过生动有趣的教学方式,帮助初学者轻松掌握编程基础。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文将详细介绍如何在Linux操作系统中执行PHP脚本,包括环境配置、命令使用及验证方法。对于需要在Linux环境下开发或部署PHP应用的用户来说,这是一篇非常实用的文章。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
author-avatar
jkjkjd_105
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有