Java 五大原则

1、单一职责

不论是在设计类,接口还是方法,单一职责都会处处体现,单一职责的定义:我们把职责定义为系统变化的原因。所有在定义类,接口,方法的时候。定义完以后再去想一想是不能多于一个的动机去改变这个类,接口,方法。如果答案是肯定的,说明定义的类,接口,方法则多于一个职责。故违背单一职责,遇到这种情况应该重新细分职责,直到不会出现多种职责的类,接口方法为止(发现职责,并把那些职责相互分离)。单一职责的为最简单的五种原则之一。在软件设计的过程中处处体现。无处不在。

 

2、开闭原则

开闭原则是指类、模块、方法是可以扩展的,但不可以修改。开即对扩张开放,闭即对修改关闭。开闭原则的应用体现在,开发人员应该仅仅对程序中频繁出现变化的地方进行抽象(封装变化点)。对变化点的封装即对变化的修改关闭。对于变化的不确定性,可随时扩展。即 继承的使用。抽象类的运用。

 

3、替换原则(Is-A)

替换原则即是总是保证子类可以替换它的基类。替换原则的实现。对于一组具有类似属性,方法,变量的类。我们可以提取公共属性,方法,变量做为一个基类(抽象类或者类),使这一组类继承基类,重写虚方法。现在这些继承的类和基类的关系符合Is-A。如基类为鸟,则继承类可以为麻雀,燕子。我们可以说麻雀Is-A鸟,燕子Is-A鸟。在项目中所有使用子类的地方都可用父类替换,但在调用方法的时候 ,即呈现面向对象编程的多态性。即替换原则,非常重要的原则,也是比较对难的原则。

 

4、依赖倒置原则

a、高层模块不应该依赖于低层模块。二者都应该依赖于抽象b、抽象不应该依赖于细节。细节应该依赖于抽象。在面向过程的开发语言中分析和设计,总是创建一些高层模块去调用低层模块、策略依赖于细节的软件结构。实际上这种方法的目的就是要定义子程序层次结构,该结构 描述了高层模块怎样调用低层模块。而设计良好的面向对象的程序,正好“倒置”了这种依赖关系。高层模块不再依赖于低层模块,从而低层模块的修改不会影响到高层模块,并且高层模块也是能非常容易的被重用,高层模块和低层模块都影响都依赖于抽象。这样也非常符合强内聚松耦合的编程思想。故该原则也是框架设计的核心原则。使用传统的过程化程序设计所创建出来的依赖关系结构,策略是依赖于细节的,这是糟糕的,因为这样会使策略受到细节改变的影响,面向对象的程序设计倒置了依赖关系结构,全程细节和策略都依赖抽象,并且常常是客户程序拥有服务接口。事实上,这种依赖关系的倒置正是好的面向对象设计 的标志所在,使用何种语言来编写程序是无关紧要的。如果程序的依赖关系是倒置的,它就是面向对象的设计。如果程序的依赖关系不是倒置的,它就是过程化的设计。依赖倒置原则是实现许多面向对象技术所宣称的好处的基本低层机制。它的正确应用对于创建可重用的框架来说是必需的。同时它对于构建在变化面前富有弹性的代码也是非常重要的,由于抽象和细节彼此隔离,所以代码也非常容易维护。

 

5、接口隔离原则

应该说该原则是处理现有“胖”接口所存在的缺点。如果类的接口不是内聚的,就表示该类具有“胖”接口。换句话说“胖”接口可以分解成多组方法。每一组方法都服务于一组不同的客户程序。这样,量引客户程序可以使用一组成员函数,而其他客户程序可以使用其他组的成员函数。接口隔离的方法有两种(分享客户就是分离接口):1、使用委托(此委托非.net委托[delegate])分离接口使用委托即,创建一个委托类,用此类去实现分离后的其它接口中的方法。2、使用多重继承分离接口、此方法,即将现有“胖”接口分成供不同客户程序调用的两个或多个接口,而需要实现多个接口的客户程序,则使用多重继承来实现。这两种方法是实现接口隔离的全部方法,其中第二种方法使用较普遍,也比较简单。而第一种方法使用起来相对比较复杂,而且在使用委托的过程中也会产生重复的对象,则占用运行时间和内存开销。有的时候第二种方法是必须的,第一种方法是不能使用的。如:利用委托对象所做的转换是必需的,或者不同的时候会需要不同的转换。

 

转载于:https://www.cnblogs.com/xiluhua/p/9276927.html

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

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

相关文章

马化腾发飙:很多业务该砍就砍,一批员工要被裁了

最近腾讯内部会议,马化腾内部讲话,频频上了热搜。在会议中,马化腾难得发飙表示:很多不盈利的业务该砍就砍。从网络新闻报道来看,可能超过40个业务即将关掉,甚至包括幻核、QQ影音、看点快报、搜狗地图、腾讯…

在ASP.Net和IIS中删除不必要的HTTP响应头

引入 每次当浏览器向Web服务器发起一个请求的时,都会伴随着一些HTTP头的发送.而这些HTTP头是用于给Web服务器提供一些额外信息以便于处理请求。比如说吧。如果浏览器支持压缩功能,则浏览器会发送Accept-Encoding HTTP头,这样一来服务器便知道…

SAP Customer Data Cloud(Gigya)的用户搜索实现

我在Gigya前台根据email搜索,输入一个邮箱地址,回车,在Chrome开发者工具里观察到到后台的网络请求: 这是一个post请求: __RequestVerificationToken 请求体: {"query":"SELECT * FROM accou…

C# ComboBox枚举量绑定的 两种方法

概述ComboBox绑定枚举量的方法有很多&#xff0c;今天列举比较常用的两种&#xff0c;希望对读者们一些帮助&#xff01;代码讲解前台XMAL:<StackPanel><ComboBox Name"EvenType1" SelectedIndex"0" Margin"5"/><ComboBox Name&…

springboot + mybatis + gradle项目构建过程

1.从Spring boot官网根据需求下载脚手架或者到GitHub上去搜索对应的脚手架项目,D_iao ^0^ • 文件目录如下&#xff08;此处generatorConfig.xml 和 log4j2.xml文件请忽略&#xff0c;后续会讲解&#xff09; 2.使用Mybatis代码自动构建插件生成代码 • gradle 相关配置 // My…

基于间隔推送全量更新数据状态的设计方法

2019独角兽企业重金招聘Python工程师标准>>> 假如有个直播间&#xff0c;在数据有更新的时候&#xff0c;能及时反映在客户端上。通信方式来说&#xff0c;有两种&#xff1a; 1、拉取模式。 2、推送拉取模式&#xff08;或者纯推送&#xff09; 拉取模式&#xff0…

Redis 哈希(Hash)

哈希hash又称为散列、杂凑等&#xff0c;是将任意长度的输入通过散列算法变换为固定长度的输出&#xff0c;最终输出也就是哈希值。这种转换是一种压缩映射。也就是说&#xff0c;散列值的空间通常要远小于输入控件&#xff0c;不同的输入可能会散列成相同的输出&#xff0c;所…

京东Vue组件库NutUI 2.0发布:将支持跨平台!

NutUI 是一套来自京东用户体验设计部&#xff08;JDC&#xff09;前端开发部的移动端 Vue 组件库&#xff0c;NutUI 1.0 版本于 2018 年发布。据不完全统计&#xff0c;目前在京东至少有30多个 web 项目正在使用 NutUI。 经过一段时间紧锣密鼓的开发&#xff0c;近期&#xff0…

macbook 下载时睡眠_MacBook进入睡眠状态时如何自动使其静音

macbook 下载时睡眠You open your MacBook to take notes in class or during a meeting, and your music starts playing. Loudly. Not only did you disrupt everyone, you also revealed your passion for 90’s boy bands to a room full of people who once respected you…

Mac 的mysql5.7没有配置文件,如何解决only_full_group_by 问题

数据库版本是5.7.19&#xff0c;在写语句的时候&#xff0c;只要涉及ORDER BY,就会报错&#xff0c; ERROR 1055 (42000): Expression #7 of SELECT list is not in GROUP BY clause and contains nonaggregated column postscan.verifyDelayLog.auditor which is not function…

Spring MVC 入门(一)

什么是 Spring MVC 学习某一样东西之前&#xff0c;我们一定要大致知道这个东西是什么&#xff0c;能干什么&#xff0c;为什么要用它。 Spring MVC 是一个开源平台&#xff0c;一个基于 Spring 的 MVC 框架&#xff0c;它支持基于 Java 开发 Web 应用程序。MVC 架构很利于开发…

开源网关 Apache APISIX 认证鉴权精细化实战讲解

关注公众号并添加到“星标⭐”&#xff0c;防止错过消息后台回复【资料包】获取学习资料GitOps 新手入门到专家进阶实战详细教程作者钱勇&#xff0c;API7.ai 开发工程师&#xff0c;Apache APISIX Committer在当下云原生越发成熟的环境下&#xff0c;API 网关最核心的功能可以…

python应用POP3、IMAP、SMTP 协议,获取邮箱验证码

&#xff30;&#xff2f;&#xff30;&#xff13;和&#xff29;&#xff2d;&#xff21;&#xff30;是邮件相关的协议&#xff0c;&#xff29;&#xff2d;&#xff21;&#xff30;是比&#xff30;&#xff2f;&#xff30;&#xff13;更高级一点的协议&#xff0c;实…

固件中启用的虚拟化否_哪些固件或硬件机制可启用强制关机?

固件中启用的虚拟化否At one time or another, all of us have had to force our computers to shut down by pushing and holding the power button down until they powered off. Is this mechanism hardware-based, firmware-based, or both? Today’s SuperUser Q&A p…

简述闭包

闭包 这是我对闭包的一点小理解.有问题请直接指出,在此先谢过! 闭包的含义 封闭隔离的空间,在javascript中,只有函数能够符合这种特性; 为什么要用闭包呢? 因为在引用外部js文件(如jquery,各种框架)时防止变量重名造成的问题,同时也使代码更具隐私性; 获取闭包中数据的方法: …

Confluence 6 配置服务器基础地址备注

使用不同 URL。如果你配置了不同的基础 URL 地址或者你站点的访问者使用了不同的 URL 地址来访问你的 Confluence 地址&#xff0c;你有很大概率可能会受到错误信息。修改上下文地址。如果你修改了基础 URL 地址的上下文地址&#xff0c;你同时也需要修改下面的配置&#xff1a…

2019第10周知识总结

react 事件绑定 函数写法 文档总结 https://react.docschina.org/docs/handling-events.html 1 通过 constroucor绑定 class Toggle extends React.Component {constructor(props) {super(props);this.state {isToggleOn: true};// This binding is necessary to make this wo…

.NET 云原生架构师训练营(基于 OP Storming 和 Actor 的大型分布式架构二)--学习笔记...

▲ 点击上方“DotNet NB”关注公众号回复“1”获取开发者路线图学习分享 丨作者 / 郑 子 铭 这是DotNet NB 公众号的第202篇原创文章目录为什么我们用 OrleansDapr VS OrleansActor 模型Orleans 的核心概念结合 OP Storming 的实践结合 OP Storming 的实践业务模型设计模型代…

PHP 多维数组转json对象

PHP 多维数组转json对象 php 数组转json对象&#xff0c;可能大家都知道要用json_encode,但是转换出来的格式多有不同&#xff0c;此处做个小小的记录&#xff01; 1. 一维数组转json对象 <?php $arr_1 [one, two, three]; var_dump(json_encode($arr_1)); $arr_2 [0 >…

微软文本检索_如何在Microsoft Word中引用其他文档中的文本

微软文本检索You probably have some text that you type often in your Word documents, such as addresses. Instead of retyping this text every time you need it, you can put this common text into one Word document and reference it in other documents–it’ll eve…