设计模式中的六大基本原则

软件设计中的基本共识:

1,高内聚,低耦合:如果想使软件系统架构稳定,那么我们期望软件的各模块内元素结合的紧密,而模块之间的耦合度(关联性)越低越好。高内聚不仅体现在模块上,单独的类或方法也应该是内聚的。

2,面向抽象编程:面向过程开发中,上层组件调用下层组件,这意味着当下层发生剧烈变化时候,上层组件也得跟着一起变化,增加了维护成本。面向对象的设计中,我们努力使程序依赖抽象,而不去依赖具体实现,首先依赖抽象降低了模块间实现细节的耦合度,其次抽象变化的概率比较小,修改具体实现不影响其他模块,降低了风险成本,提升了软件结构的健壮性。

3,多用组合少用继承:组合和继承都是对已有属性和功能的复用,继承偏向于扩展,组合偏向于使用。组合的好处在于其方式更加灵活,不会对类造成危害,不会造成膨胀,同时减少了对父类的依赖。少用继承而不是不用继承,使用继承结构的代码可读性更高,一般认为继承结构不应该超过四层,而且应该谨慎的使用修饰符。

4,开闭原则:软件设计中主张“对扩展发放,对修改关闭”,该原则倡导我们对软件实体进行扩展时,尽量不要去修改原有的软件实体进行修改。

对以上共识具体化和规范化就有了设计模式的六大原则:

1,开闭原则:一个软件实体应该对扩展开放,对修改关闭。

2,单一职责原则:一个类应该应该只有一个引起他变化的原因。

3,依赖倒置原则:要依赖要抽象,而不是依赖具体实现。

4,接口隔离原则:使用多个隔离的接口,分离不同的接口行为,也就是说一个类对另外类的依赖性应该建立在最小接口上。

5,里氏替换原则:继承必须保证基类所拥有的性质在子类中仍然成立,即子类应当替换任何基类能够出现的地方。

6,迪米特法则:只和密友交谈。即一个软件实体应该尽可能少的于其他实体发生相互作用。

 

转载于:https://www.cnblogs.com/Oldz/p/10996760.html

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

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

相关文章

广元南山隧道南河互通立交图_广元城区一隧道工程竣工时间已定,今后出行更加方便了!...

4月15日,伴着轰隆的机械声,记者踏入国道212线南山隧道工程项目建设现场,突然眼前飘来一阵细密小雨,抬头望去,原来是建设边坡上一排白色雾炮机正在进行降尘作业。记者看到,数控钢筋加工厂内工人们正抓紧预制…

Java EE 7:新增功能???

我有点“晚点”,可以这么说……就Java EE 7的 “博客”而言。 自2013年6月发布以来,已经差不多10个月了 ,但是它仍然相对较新。 就我个人而言,仅仅是因为它的易用性和所购买的功能范围之广,我对此感到很兴奋。但是&…

浏览器的同源策略及跨域解决方案

同源策略 一个源的定义 如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源。 举个例子: 下表给出了相对http://a.xyz.com/dir/page.html同源检测的示例: URL结果原因http://a.xyz.com/dir2/ot…

sass继承

extend sass中,选择器继承可以让选择器继承另一个选择器的所有样式,并联合声明。使用选择器的继承,要使用关键词extend,后面紧跟需要继承的选择器。 scss.style css.style 从sass 3.2.0以后就可以定义占位选择器%。 这种选择器…

论中国传统辩证推理科学理论范式(ZZ)

摘要:西方科学的形式逻辑以一系列相互独立的公理、设定、经验模型等为大前提,以不矛盾的逻辑为推理手段,构建其系统的科学理论,决定了其理论体系下的世界是众多不连续的带状、绳索状或网状结构的共存体,而不可能是一个…

计算机病毒及其防治评课,区初中信息技术教研活动公开课评课感想

今天上午,在我校成功举行了区初中信息技术教研活动,总共开设了三节课,都是由我校老师执教的。听后受益匪浅,感受颇深,以下是本人的评课感想。一、首先说一下三位老师的共同点:1、三位老师都用了导学案&…

Django—路由层,视图层

路由层urls 浏览器会自动给url后加一个“/” django会自动给路由的正则表达式前面加一个“/” django会给任何不带“/”结尾的url语句添加“/”(可设置) 短路路由规则:匹配到第一条就忽略后面所有! 所以路由顺序很重要&#xff01…

分数怎么化成带分数_人教版五年级下册第4单元带分数及把假分数化成整数或带分数教学视频+知识点...

|点击题目下方蓝字一键关注 小学生知识库|【教学视频】分数的分类与互化【知识点】带分数的意义和特征:像…这样由整数和真分数合成的数叫做带分数。假分数化成整数或带分数的方法是什么?①当假分数的分子是分母的倍数时,这个假分数可以化成整…

Java 8功能教程– ULTIMATE指南(PDF下载)

编者注:在本文中,我们提供了全面的Java 8功能教程。 自Java 8公开发布以来已经有一段时间了,所有迹象都表明这是一个非常重要的版本。 我们在Java Code Geeks处提供了大量教程,例如“ 玩Java 8 – Lambda和并发” ,“…

盆景

dvbbs收藏本页联系我们论坛帮助dvbbs恢复默认设置登录注册 搜索风格论坛状态论坛展区道具中心我能做什么 >> 优秀作品欣赏、个人作品展示。(The excellent work enjoys, personal work demonstration) 搜一搜相关精彩主题 盆景艺术在线论坛 → 盆景论坛(penjing Forum) →…

计算机硬件系统的构成教学设计,2.1 计算机硬件系统教学设计思路

第二章:计算机的硬件和软件第一节:计算机的硬件构成一、教材分析本节的重点是冯.诺依曼存储程序思想以及相应的计算机机硬件逻辑结构。通过对计算机五大逻辑部件的理解从而更好的掌握计算机在处理信息时的工作流程。同时要求学生能够识别常见的计算机设备…

小程序左右标签滑块排行榜

小程序左右标签滑块排行榜 效果: <view class"menu"><view class"{{currentTab0?select:default}}" data-current"0" bindtap"switchNav">成绩</view><view class"{{currentTab1?select:default}}" …

mysql pxc_MySQL之PXC集群搭建

一、PXC 介绍1.1 PXC 简介PXC 是一套 MySQL 高可用集群解决方案&#xff0c;与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题&#xff0c;基本上可以达到实时同步。而且节点与节点之间&#xff0c;他们相互的关系是对等的。PXC 最…

Nashorn简介

引入了Java 8和名为“ Nashorn”的新JavaScript引擎。 Nashorn基于Da Vinci Machine&#xff0c;该项目旨在为JVM添加动态语言支持。 Nashorn是使混合软件比以前更轻松的一个很好的里程碑。 该引擎的出色功能使您能够在Java&#xff08;任何其他编译语言&#xff09;代码和java…

CCF关于NOIP竞赛程序提交的管理规则

在NOIP复赛中&#xff0c;NOI各省组织单位必须严格遵循CCF《关于NOIP数据提交格式的说明》的规范在竞赛结束后规定时间内向CCF提交本赛区所有参赛选手的程序。 为竞赛的公平以及赛后按时完成竞赛程序的评测&#xff0c;制定本规则。 提高组&#xff1a;每次赛后3小时内提交&…

计算机三级信息安全技术考什么2019,2019计算机三级信息安全技术精品练习8

2019计算机三级信息安全技术精品练习82019-06-19 16:37:49来源&#xff1a;计算机等级考试网分享导读&#xff1a;还不知道全国计算机等级考试时间吗&#xff1f;2019年考试共举行4次&#xff0c;下一次考试时间为9月份&#xff0c;距离考试的时间越来越短了&#xff0c;已经报…

微软Visual Studio2005开发工具路线图详解

微软Visual Studio2005开发工具路线图详解 随着企业需要的不断演变&#xff0c;Microsoft 依旧致力于提供创新的开发人员工具来满足这些不断变化的需求&#xff0c;从而确保客户的成功。为帮助组织规划未来的软件开发工作&#xff0c;Microsoft 提供了一个开发人员工具计划版本…

解决微信小程序的wx-charts插件tab切换时的显示会出现位置移动问题-tab切换时,图表显示错乱-实现滑动tab

解决Echarts在微信小程序tab切换时的显示会出现位置移动问题 tab切换时&#xff0c;图表显示错乱 <canvas class"kcanvas" canvas-id"ringCanvas" hidden"{{currentTab 1}}"></canvas> <view hidden"{{currentTab ! 1}}…

mysql字段唯一确定_验证表里某不确定的字段的值是否唯一的方法?

你这个问题是否可以理解为“验证表里的某一不确定的字段的值&#xff0c;没有重复”&#xff1f;如果是的话&#xff0c;那么你就可以先查出表的总记录数&#xff0c;然后在查出该字段去重之后的总记录数&#xff0c;对比两次结果&#xff0c;如果数量相同则没有重复&#xff1…

说下Java堆空间结构,及常用的jvm内存分析命令和工具

Java堆空间结构图&#xff1a;http://www.cnblogs.com/SaraMoring/p/5713732.html JVM内存状况查看方法和分析工具&#xff1a; http://blog.csdn.net/neosmith/article/details/47753733 转载于:https://www.cnblogs.com/zhuyeshen/p/11005208.html