Java 五大原则
1、单一职责
不论是在设计类,接口还是方法,单一职责都会处处体现,单一职责的定义:我们把职责定义为系统变化的原因。所有在定义类,接口,方法的时候。定义完以后再去想一想是不能多于一个的动机去改变这个类,接口,方法。如果答案是肯定的,说明定义的类,接口,方法则多于一个职责。故违背单一职责,遇到这种情况应该重新细分职责,直到不会出现多种职责的类,接口方法为止(发现职责,并把那些职责相互分离)。单一职责的为最简单的五种原则之一。在软件设计的过程中处处体现。无处不在。
2、开闭原则
开闭原则是指类、模块、方法是可以扩展的,但不可以修改。开即对扩张开放,闭即对修改关闭。开闭原则的应用体现在,开发人员应该仅仅对程序中频繁出现变化的地方进行抽象(封装变化点)。对变化点的封装即对变化的修改关闭。对于变化的不确定性,可随时扩展。即 继承的使用。抽象类的运用。
3、替换原则(Is-A)
替换原则即是总是保证子类可以替换它的基类。 替换原则的实现。对于一组具有类似属性,方法,变量的类。我们可以提取公共属性,方法,变量做为一个基类(抽象类或者类),使这一组类继承基类,重写虚方法。现在这些继承的类和基类的关系符合Is-A。如基类为鸟,则继承类可以为麻雀,燕子。我们可以说麻雀Is-A鸟,燕子Is-A鸟。 在项目中所有使用子类的地方都可用父类替换,但在调用方法的时候 ,即呈现面向对象编程的多态性。即替换原则,非常重要的原则,也是比较对难的原则。
4、依赖倒置原则
a、高层模块不应该依赖于低层模块。二者都应该依赖于抽象 b、抽象不应该依赖于细节。细节应该依赖于抽象。 在面向过程的开发语言中分析和设计,总是创建一些高层模块去调用低层模块、策略依赖于细节的软件结构。实际上这种方法的目的就是要定义子程序层次结构,该结构 描述了高层模块怎样调用低层模块。而设计良好的面向对象的程序,正好“倒置”了这种依赖关系。高层模块不再依赖于低层模块,从而低层模块的修改不会影响到高层模块,并且高层模块也是能非常容易的被重用,高层模块和低层模块都影响都依赖于抽象。这样也非常符合强内聚松耦合的编程思想。故该原则也是框架设计的核心原则。 使用传统的过程化程序设计所创建出来的依赖关系结构,策略是依赖于细节的,这是糟糕的,因为这样会使策略受到细节改变的影响,面向对象的程序设计倒置了依赖关系结构,全程细节和策略都依赖抽象,并且常常是客户程序拥有服务接口。 事实上,这种依赖关系的倒置正是好的面向对象设计 的标志所在,使用何种语言来编写程序是无关紧要的。如果程序的依赖关系是倒置的,它就是面向对象的设计。如果程序的依赖关系不是倒置的,它就是过程化的设计。 依赖倒置原则是实现许多面向对象技术所宣称的好处的基本低层机制。它的正确应用对于创建可重用的框架来说是必需的。同时它对于构建在变化面前富有弹性的代码也是非常重要的,由于抽象和细节彼此隔离,所以代码也非常容易维护。
5、接口隔离原则
应该说该原则是处理现有“胖”接口所存在的缺点。如果类的接口不是内聚的,就表示该类具有“胖”接口。换句话说“胖”接口可以分解成多组方法。每一组方法都服务于一组不同的客户程序。这样,量引客户程序可以使用一组成员函数,而其他客户程序可以使用其他组的成员函数。 接口隔离的方法有两种(分享客户就是分离接口): 、使用委托(此委托非.net委托[delegate])分离接口 使用委托即,创建一个委托类,用此类去实现分离后的其它接口中的方法。 、使用多重继承分离接口、 此方法,即将现有“胖”接口分成供不同客户程序调用的两个或多个接口,而需要实现多个接口的客户程序,则使用多重继承来实现。 这两种方法是实现接口隔离的全部方法,其中第二种方法使用较普遍,也比较简单。而第一种方法使用起来相对比较复杂,而且在使用委托的过程中也会产生重复的对象,则占用运行时间和内存开销。有的时候第二种方法是必须的,第一种方法是不能使用的。如:利用委托对象所做的转换是必需的,或者不同的时候会需要不同的转换。
Java 五大原则的更多相关文章
- Java成长第五集--面向对象设计的五大原则
S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则(Programming Priciple)的首字母缩写.以下图说明: 下面就个人的理解来说说这五大原则的含义到 ...
- OO的五大原则是指SRP、OCP、LSP、DIP、ISP。
OO的高层原则,面向对象设计的基本原则 设计模式之六大原则--开闭原则(OCP) 设计模式之六大原则--迪米特法则(LoD,LKP) 设计模式之六大原则--接口隔离原则(ISP) 设计模式之六大原则- ...
- 深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP
前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第4篇,接口隔离原则ISP(The Interface Segregation Principle). 英文原文:htt ...
- 面向对象设计SOLID五大原则
转载自:码农社区,http://w3croom.com/read.php?tid-4522.html 今天我给大家带来的是面向对象设计SOLID五大原则的经典解说. 我们知道,面向对象对于 ...
- S.O.L.I.D五大原则- 深入了解javascript
/* S.O.L.I.D五大原则 1. 单一原则 2. 开闭原则 3. 里氏替换原则 4. 接口分离原则 5. 依赖反转原则 */ /*单一原则:类发生更改的原因只有一个 如何知道一个对象的多个行为构 ...
- 为什么Android AsyncTask的使用要遵循五大原则
引言 AsyncTask是一个围绕Handler和Thread而设计的助手类,封装了在工作线程中与UI交互的细节,只需要对应重写几个回调方法即可,并使得代码更加简洁,优雅.但要注意的是AsyncTas ...
- OO的五大原则:SRP、OCP、LSP、DIP、ISP
OO的五大原则是指SRP.OCP.LSP.DIP.ISP. SRP -- (Single Responsibility Principle 单一职责原则) OCP--开闭原则(Closed for M ...
- S.O.L.I.D五大原则之单一职责SRP
转自 : 汤姆大叔的blog Bob大叔提出并发扬了S.O.L.I.D五大原则,用来更好地进行面向对象编程,五大原则分别是: The Single Responsibility Principle(单 ...
- 面向对象五大原则(SRP、OCP、LSP、DIP、ISP)
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt173 OO的五大原则是指 1. SRP(Single Responsibil ...
随机推荐
- 复制id_rsa命令
pbcopy < ~/.ssh/id_rsa.pub https://aliasan-conf.taijiankong.cn/duotai/2T7b253i8.pac
- ios原生项目内嵌u3d工程
本文一反常态,目标是把u3d工程以framewWork形式 内嵌原生IOS项目 1.xcode中新建Cocoa Touch FrameWork.取名u3dFrameWork 2.把u3d导出的xcod ...
- 使用Python启动一个简单的服务器
在 Linux 服务器上或安装了 Python 的机器上,Python自带了一个WEB服务器 SimpleHTTPServer,我们可以很简单的使用 python -m SimpleHTTPServ ...
- classmethod作用
>>> class A(object): bar = 1 def func1(self): print 'foo' >>> class A(object): bar ...
- 【Static Program Analysis - Chapter 1】 Introduction
Regarding correctness, programmers routinely use testing to gain confidence that their programs work ...
- Dart 语言简易教程系列
google Fuchsia系统 及 dart语言简介 在 InteIIiJ IDEA 中搭建 Dart 的开发环境 Dart Linux 开发环境搭建 Dart 语言简易教程(一) Dart 语言简 ...
- VS Code设置成中文界面
1.打开VS Code,按:ctrl+shift+p打开指令面板,输入lang,选择Configure Display Language 2.将"locale"后面的"e ...
- Educational Codeforces Round 4
612A - The Text Splitting 20171121 简单字符串处理题 #include<stdlib.h> #include<stdio.h> #inc ...
- socket.io 中文文档
Socket.io是一个WebSocket库,包括了客户端的js和服务器端的nodejs,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用.它会自动根据浏览器从WebSocket.AJAX长轮 ...
- 16-1 ECMA5与ECMA6的函数定义
ECMA5: function Drag(id){ this.ele = document.getElementById(id); var that = this; this.ele.onmoused ...