热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

设计模式之六大原则

nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd

  单一职责原则

  单一职责原则(Single responsibility principle),就一个类而言,应该只有一个引起它变化的原因。

  在实际编程中的体现,比如一个类只是某一个事物相关的集合,一个函数只做一件事情,不要在这个函数中编写一些不想关的逻辑,这样可以最大程度的提高程序的可维护性,可复用性。

  开放-封闭原则

  开放-封闭原则,是说软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改,即对扩展是开放的,对修改是关闭的。新的需求,应该通过增加新的代码来完成,而不是修改现有的代码。绝对的对修改关闭是不可能的,可以预先猜测最有可能发生的变化种类,然后构造抽象来隔离那些变化。

  在实际编程中的体现,比如接手了一个复杂的代码库,要基于此完成某种功能时,如果一上手就咔咔咔大改里面的逻辑,不仅不是正确的做法,有时越改越深入,如果不完全理解这个代码库的大部分逻辑,就不能完成当前的需求,耽误了很长时间,老大肯定会不开心的^_^。

  依赖倒置原则

  1. 高层模块不应该依赖底层模块。两个都应该依赖抽象;

  2. 抽象不应该依赖细节。细节应该依赖抽象。

  开发程序时,高层模块调用底层模块的函数。当要做新项目时,发现高层模块基本一致,想要复用,但是要换用不同的数据库或者存储方式(底层模块),而高层模块与底层访问数据库的模块绑定了,无法复用,这就出现了倒置。解决办法是不管高层模块还是底层模块,都应该依赖抽象,具体一点就是接口和抽象类。

  在实际生活当中的应用,比如计算机的主板、CPU、内存、硬盘等都是针对接口设计的,如果针对实现来设计,比如某一个型号的主板只支持某一个型号的CPU,这将会大大制约计算机的发展。在实际编程中的应用,比如,一个部门写了一个lib,其他部门都要使用,那么这些部门就应该相互沟通好,大家先把接口固定,然后各自编写自己的程序,只要接口设计的稳定,这些部门之间就可以自己写自己的程序,不用担心相互干扰。

#

  里氏代换原则

  子类型必须能够替换掉它们的父类型。意思是如果一个软件实体使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别,即在软件里面,把父类都替换成它的子类,程序的行为没有变化。再通俗点,如果一个方法需要父类对象作为输入,如果你提供一个子类对象,它也应该正常工作,如果它不能正常工作,那么这种写法就违反了里氏替换原则。

  迪米特法则

  迪米特法则,如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果其中一个类需要调用领一个类的某一个方法的话,可以通过第三者转发这个调用。在类的结构设计上,每一个类都应当尽量降低成员的访问权限,不需要公开的就不要公开,其根本思想是强调了类之间的松耦合。


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 这是一个愚蠢的问题,但我只是对此感到好奇.假设我在Pythonshell,我有一些我查询的数据库对象.我做:db.query(的queryString)该查询在0xffdf842c ... [详细]
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社区 版权所有