java对象的六大原则
对象的六大原则:
1.单一职责原则(Single Responsibility Principle SRP)
2.开闭原则(Open Close Principle OCP)
3.里氏替换原则(Liskov Substitution Principle LSP)
4.依赖倒转原则(Dependence Inversion Principle DIP)
5. 接口隔离原则(Interface Segregation Principle ISP)
6.迪米特原则 (Least Knowledge Principle LKP)
单一职责原则:
就一个类而言,应该仅有一个引起它变化的原因,简而言之:一个类应该是一组相关性很高的函数、数据的封装。
一个类尽量只有一个职责(相关),两个完全不一样的功能就不应该放在一个类中,通过不断审视自己的代码,根据具体的业务,功能对类进行相应的拆分。
开闭原则:
软件中的对象(类、模块、函数等)应该对于扩展开放,对于修改是封闭的。
程序一旦开发完成,程序中的一个类的实现只因错误而被修改,新的或者改变的特性应该通过新建不同的类来实现,新建的类可以通过继承的方式来重用原类的代码。
eg:抽象为接口,对于扩展,新增类来实现。
里氏替换原则:
1.如果对每一个类型为S的对象O1,都有类型为T的对象O2,是的以T定义的所有程序P在所有的独享O1都换成O2,程序P的行为没有发生变化,那么类型S是类型T的子类型。
2.所有引用积累的地方必须能透明地使用其子类的对象。
面向对象语言的三大特点:数据抽象(封装)、继承、多态
里氏替换原则依赖于继承、多态。通俗来说:只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或者异常,但反过来就未必能行,有子类出现的地方,父类未必就能适应。将父类使用的地方替换为子类,事项多态。这就是里氏替换原则。
依赖倒转原则:
指代一种特定的解耦形式,使高层次的模块不依赖于低层次的模块的实现细节的目的。
1.高层模块不应该依赖底层模块,两者都应该依赖其抽象。
2.抽象不应该依赖细节。
3.细节应该依赖抽象。
抽象:指接口或者抽象类
细节:实现类,实现接口或者继承抽象类而产生的类就是细节,特点:可以直接被实例化
也就是说,模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或者抽象类来实现,依赖抽象而不依赖具体实现,这就是依赖倒转原则。
接口隔离原则:
顾名思义,在设计类时,我们需要将各种接口隔离,使用最少的接口,类间的依赖关系应该建立在最小的接口上。他的目的就是:系统解开耦合,从而容易重构,更改和重新部署。
迪米特原则:
一个对象应该对其他对象有最少了解,这个原则的提出也是为了降低耦合度的,便于整个系统维护,升级等等。
类与类之间的关系越密切,耦合度越大,一个类发生改变时,对另一个类的影响也就越大, Only Talk To Your Immedate Friends 只于直接的朋友通信。
其实这六大原则,总的来说,目的都是一样:降低耦合性,便于维护,扩展。
当然,我们在编程的时候不能老是想着这六大原则,从而限制了我们的思维。需要通过大量实践让我们来把这六大原则融会贯通。
java对象的六大原则的更多相关文章
- Java 设计模式(二)-六大原则
Java 设计模式(二)-六大原则 单一职责原则(Single Responsibility Principle) 定义: 不要存在多余一个原因导致类变更,既一个类只负责一项职责. 问题由来: 当类A ...
- JAVA面向对象-----java面向对象的六大原则
现在编程的主流语言基本上都是面向对象的.如C#,C++,JAVA.我们在使用时,已经构造了一个个的类.但是往往由于我们在类内部或外部的设计上存在种 种问题,导致尽管是面向对象的语言,却是面向过程的逻辑 ...
- PHP 设计模式六大原则
http://www.cnblogs.com/yujon/p/5536118.html 设计模式六大原则(1):单一职责原则 不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责 设计模 ...
- Java设计模式面试题 01 - 六大原则
Java设计模式面试题 01 - 六大原则 1. 单一职责原则 Single Responsibility Principle SRP原则 分清职责,接口一定要做到单一职责,方法也要做到,类尽量做到 ...
- java设计模式(一)【六大原则】
开发一个系统并不是一件困难的事,但是为何维护好一个系统却是一件让人头疼不以的事? 在笔者的观念中这一切都源自于需求. 如果在软件开发完成之后,需求就不再改变,那大部分程序都不需要维护了.但是, ...
- Java设计模式六大原则-2
Java设计模式六大原则-2 做Java程序开发的每天都在使用JDK,Spring,SpringMvc,Mybatis,Netty,MINA等框架,但很少有人懂得背后的原理.即使打开跟下原码也是一头雾 ...
- Java设计模式六大原则-1
Java设计模式六大原则-1 做Java程序开发的每天都在使用JDK,Spring,SpringMvc,Mybatis,Netty,MINA等框架,但很少有人懂得背后的原理.即使打开跟下原码也是一头雾 ...
- Java基础学习总结(84)——Java面向对象六大原则和设计模式
面向对象六大原则 在此之前,有一点需要大家知道,熟悉这些原则并不是说你写出的程序就一定灵活.清晰,只是为你优秀的代码之路铺上了一层栅栏,在这些原则的指导下,你才能避免陷入一些常见的代码泥沼,从而让你写 ...
- 1、Java基础:面向对象六大原则
本文主要介绍了面向对象六大原则. 单一职责原则(Single-Resposibility Principle). “对一个类而言,应该仅有一个引起它变化的原因.”本原则是我们非常熟悉地”高内聚性原则” ...
随机推荐
- python基础类型 —— Sets集合
集合(set)是一个无序不重复元素的序列. 基本功能是进行成员关系测试和删除重复元素. 运行结果如下: sets其他操作: myset.add('x') # 添加一项 myset.update([10 ...
- POJ 1948 Triangular Pastures
题意: 把很多单独的线段重新组合成一个三角形,使得三角形面积最大(所有的线段都必须用上). 思路: 三角形的任意一条边的边长不能超过周长的一半,只需要用dp枚举两条边j,k,剩下的一条边长为tot ...
- linux诡异的硬盘不足
phpmyadmin页面登录不进去,ftp也连不上.而服务端的service都开着的.直觉是看一下硬盘使用情况. df -TH 发现可用空间几乎为0 但是查看各个目录使用情况: du -sh /* | ...
- ERP渠道信息的修改和渠道联系记录(二十三)
用例图: 前端代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Cha ...
- xgboost 实践
xgboost 安装:xgboost:Scalable and Flexible Gradient Boosting github: eXtreme Gradient Boosting 中文教程:可 ...
- 在Github和Git上fork之简单指南
http://www.linuxidc.com/Linux/2014-11/109785.htm 以我的经验来看,刚接触Git和GitHub时,最困扰的一件事情就是尝试解决下面的问题:在Git和Git ...
- python3脚本获取本机公网ip
python脚本获取本机公网ip 1.获取公网IP地址方式,访问:http://txt.go.sohu.com/ip/soip 2.代码实现 import requests import re r ...
- maven自定义脚手架(快速生成项目)
Maven之自定义archetype生成项目骨架 利用脚手架生成 新项目 命令行方式 mvn archetype:generate \ -DarchetypeGroupId=com.xxx \ -Da ...
- 多线程学习笔记七之信号量Semaphore
目录 简介 数据结构 示例 实现分析 构造方法 信号量的获取(公平方式) 信号量的释放(公平方式) nonfairTryAcquireShared(int acquires) 总结 简介 Sema ...
- liunx的命令大全