设计模式1——设计模式的原则

1.从面向对象说起

~~~~~~      变化是代码复用的天敌,面向对象的设计语言的优势就是抵御变化!这里的所谓抵御变化,不是说采用面向对象的设计语言,就没有变化,而是将变化的范围降到最小。
~~~~~~      之前我们所认识的面向对象的语言,具有封装、继承和多态三大特性,但这是面向对象的底层思维;
~~~~~~      从抽象思维认识面向对象,它首先要能隔离变化:从宏观的角度来看,面向对象的语言更能适应软件带来的变化,将这种变化的影响降到最低,
~~~~~~      其次面向对象要求各个类之间各司其职:从微观的角度来看,面向对象更强调各个类各个承担的责任,各个类之间各司其职,变换导致的新增类型不应该影响原有的类,一般使用C++多态机制实现这种“各司其职”,接口一致,但是实现不一。

2.对象究竟是什么?

~~~~~~      从语言的角度来看,对象封装了代码和数据;
~~~~~~      从规格的角度来看,对象是一系列的可被使用的公共接口;
~~~~~~      从概念的角度来看,对象是某种拥有责任的抽象

3.面向对象的设计原则(8个)

~~~~~~       1.依赖倒置原则
~~~~~~~~~~          高层模块不应该依赖于低层模块,二者都应该依赖于抽象;
~~~~~~~~~~          抽象不应该依赖于实现细节,而实现细节应该依赖于抽象;

这里的高层模块可以理解为父类,低层模块可以理解为子类,抽象可以理解为抽象类,
实现细节可以理解为具体的虚函数功能实现。这句话就是说父类不应该依赖子类,它们都要依赖抽象类,
抽象类中不要有具体的函数实现,而具体的虚函数实现要依赖于抽象类所谓的依赖倒置是指在编写代码时,一般的编写规则是抽象在最上,然后父类,最下面是子类。
但是设计模式的依赖关系是倒置的,下面的代码需要依赖上面的,这就是依赖倒置原则。

~~~~~~       2.开放封闭原则
~~~~~~~~~~          对拓展开放,对修改封闭;
~~~~~~~~~~          类的模块应该是可拓展的,但是不可修改;

当需求变化时,首先想到的不应该是修改源代码,修改的成本太高,并且大型代码不能轻易修改,
而是在原来代码不变的基础上,增加一些代码,以实现某些需求。
当然可拓展性需要提前在做好规划,比如在抽象类中提前留好拓展接口

~~~~~~       3.单一职责原则
~~~~~~~~~~          相同的责任不要分散到不同的类中;
~~~~~~~~~~          避免一个类承担不同的责任

单一职责的好处是:减少耦合性,提高复用性

~~~~~~       4.替换原则
~~~~~~~~~~          子类能够替换它的父类

为什么要强调子类能够替换父类呢?如果子类能够替换父类,说明父子类之间的强关系,
至少父类的实现在子类中都有

~~~~~~       5.接口隔离原则
~~~~~~~~~~          不要给客户程序提供它们用不到的方法,接口应该尽量小而完备。

客户程序用不到的类中方法,就不要public出去,
如果只是自己类中使用,就private;如果只是子类中使用,就protected;
真正有必要的情况下,即客户程序真的需要这个方法,才去public

~~~~~~       6.优先使用对象组合而不是类继承

继承某种程度上会破坏封装性,父类子类间的耦合性高,而对象组合不会出现这种问题。

~~~~~~       7.封装变化点

封装的最高境界是封装变化点,一端变化,一端不变化

~~~~~~       8.针对接口编程,不针对实现编程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/482984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

盘点:2021年度物理学十大突破|《物理世界》

来源:物理世界作者:哈米什约翰斯顿(Hamish Johnston)译者:王晓涛、乔琦2021年12月14日,《物理世界》(Physics World)编辑从其网站发表的近600项研究进展中评选出了年度物理学领域十大…

操作系统学习笔记-01-1.1课程概述

此课程来自于b站操作系统_清华大学(向勇、陈渝),博客作为博主手打,当作参考笔记,回头复习223 1.1课程概述 课程简介 什么是操作系统 为什么学习以及如何学习操作系统 操作系统的实例,历史和结构介绍 基本概念及原理 操作系统…

Python实现二叉树的遍历

二叉树是有限个元素的集合,该集合或者为空、或者有一个称为根节点(root)的元素及两个互不相交的、分别被称为左子树和右子树的二叉树组成。 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分&#…

tdms打开闪退问题

问题:tdms打开闪退 解决方法如下,打开excel,在菜单栏中点【文件】 左下方进入【选项】,然后在excel选项中点击【加载项】 然后在下方的管理,选择【COM加载项】,点击【转到】 将NI的TDMS【Add-in】的打勾&a…

操作系统学习笔记-02-1.2-什么是操作系统

1.2什么是操作系统 没有一个完整,精确,公认的定义从功能和特点上来介绍操作系统 用户角度上,操作系统是一个控制软件管理应用程序为应用程序提供服务杀死应用程序 资源管理管理外设,分配资源 操作系统架构层次 硬件之上应用程序之…

大脑活动与认知: 热力学与信息论的联系

来源:集智俱乐部作者:Guillem Collell、Jordi Fauquet译者:张澳审校:刘培源编辑:邓一雪导语信息和能量之间的关系已经在物理学、化学和生物学中得到了广泛的研究。然而,这种联系并没有在神经科学领域形式化。2015年&am…

我为能准时下班而做的准备,以及由此的收获,同时总结下不足

可能有人会说,做IT的想准时下班很难,尤其是在互联网公司。有些外企或国企倒能准时下班,原因是公司更像养老院。 其实这里存在个误区:能否准时下班其实和工作效率和质量有关,取决于自己,而不在于其它因素。公…

Ubuntu下进行截图的快捷方式

shiftFnPRT SC 截图结果保存在用户下的相册中

离散数学学习笔记-01-随机试验与随机事件

文章目录1.1.1随机试验与随机事件引言随机事件1.1.2.样本空间与事件的集合表示基本概念1.1.3事件之间的关系1.包含2.并(和)引入概率论的三个要素:1.1.1随机试验与随机事件 引言 确定性(必然):一定发生&am…

18-ESP8266 SDK开发基础入门篇--TCP 服务器 RTOS版,串口透传,TCP客户端控制LED

https://www.cnblogs.com/yangfengwu/p/11112015.html 先规定一下协议 aa 55 02 01 F1 4C 控制LED点亮 F1 4C为CRC高位和低位aa 55 02 00 30 8C 控制LED熄灭 30 8C为CRC高位和低位 aa 55 03 占空比(四字节 高位在前,低位在后) CRC校验高位,CRC校验低位 预留一个问题 我用客…

Ubuntu下的git使用指南

1.创建账号,绑定邮箱 在Git或者Gitee中创建一个Git账号或者Gitee账号,绑定邮箱,Ubuntu下的git命令对Git或者Gitee都有效。 2.安装git Ubuntu下下载git命令: sudo apt-get install git在下载完之后,可以通过git --v…

人类、动物和人工智能意识的新理论

来源:ScienceAI编译:萝卜皮德国波鸿鲁尔大学(RUB)的两名研究人员提出了一种新的意识理论。他们一直在探索意识的本质,大脑如何产生意识以及在何处产生意识,以及动物、人工智能是否也有意识等问题。新概念将…

算法日记-01-算法和数据结构概览

算法日记-01-算法和数据结构概览 文章目录算法日记-01-算法和数据结构概览1.数据结构2.算法3.如何解题?4.刷题方法5.小结1.数据结构 一维 基础:数组arry(string),链表 linked list高级:栈 stack&#xff0…

ffmpeg——简单播放器代码

1.媒体文件播放总体过程 媒体文件——>解复用——>解码——>调用播放接口——>播放 2.解复用 2.1 什么是解复用? 解复用:将媒体文件分解为视频流和音频流 avformat_open_input() /*打开对应的文件,查找对应的解复用器&…

Github项目汇总

阿里 https://github.com/alibaba腾讯 https://github.com/AlloyTeam百度 https://github.com/baidufehttps://github.com/ecomfe网易 https://github.com/netease豆瓣 https://github.com/douban大众点评 https://github.com/dianping转载于:https://www.cnblogs.com/annwyn/p…

Nature公布2022年值得关注的七大科学事件, 中国一项入选!

来源:科技日报 记者 刘霞 文中图片来自《自然》杂志官网,版权属于原作者,仅用于学术分享尽管今年新冠疫情仍然肆虐,给人类带来不少悲剧和灾难,但“每朵乌云都镶有金边”!新冠疫苗成为抗击疫情的有力武器、…

计算机网络学习笔记-01-概念,组成,功能,分类

计算机网络-2019 王道考研 计算机网络-1-概念,组成,功能,分类 文章目录1.概念,组成,功能,分类1.1概念1.2功能1.3组成部分1.3分类1.4思维导图总结1.概念,组成,功能,分类 …

面试题目

一、请写出以下代码运行结果 1 var str hello; 2 (function(){ 3 conso.log(str) 4 var str world 5 })() 结果是:undefined; 二、请写出以下代码运行结果 1 function fun(){2 var a function(){3 console.log(1) 4 }5 retur…

深度学习如炼丹,你有哪些迷信做法?网友:Random seed=42结果好

来源:机器学习研究组订阅调参的苦与泪,还有那些「迷信的做法」。每个机器学习领域的研究者都会面临调参过程的考验,当往往说来容易做来难。调参的背后往往是通宵达旦的论文研究与 GitHub 查阅,并需要做大量的实验,不仅…

计算机网络学习笔记-02-标准化工作以及相关组织

计算机网络-2019 王道考研 计算机网络-02-标准化工作以及相关组织 文章目录2.标准化工作以及相关组织2.1标准化工作2.2 相关组织2.3思维导图2.标准化工作以及相关组织 2.1标准化工作 标准的分类 法定标准:OSI事实标准:TCP/IP 举例子:手机卡…