转载自:码农社区,http://w3croom.com/read.php?tid-4522.html

今天我给大家带来的是面向对象设计SOLID五大原则的经典解说。 
    
  我们知道,面向对象对于设计出高扩展性、高复用性、高可维护性的软件起到很大的作用。我们常说的SOLID五大设计原则指的就是: 
    
  S = 单一职责原则 Single Responsibility Principle 
  O = 开放闭合原则 Opened Closed Principle  
  L = Liscov替换原则 Liscov Substitution Principle 
  I = 接口隔离原则 Interface Segregation Principle 
  D = 依赖倒置原则 Dependency Inversion Principle 
    
  我们一一去解说面向对象的五大设计原则: 
  1. 单一职责原则 
  引起类变化的因素永远不要多于一个,或者说:一个类有且只有一个职责。 
  如果类包含多个职责,代码会变得耦合;SRP看起来是把事物分离成分子部分,以便于能被复用和集中管理,这点也同样适用于方法级别。 
    
  2. 开放封闭原则 
  软件实体(类,模块,函数等等)应当对扩展开放,对修改闭合。 
  如图:客户端和服务段都耦合在一起。那么,只要出现任何变化,服务端变化了,客户端一样需要改变。 
   
    
  下面则是正确的设计:对外关联接口或者抽象类 
   
    
  3.Liskov’s 替换原则 
  子类型必须能够替换它们基类型,或者说使用基类引用的函数必须能使用继承类的对象而不必知道它。 
  为什么LSP这么重要: 
  ● 如果没有LSP,类继承就会混乱;如果子类作为一个参数传递给方法,将会出现未知行为; 
  ● 如果没有LSP,适用与基类的单元测试将不能成功用于测试子类; 
    
  4. 接口分离原则 
  客户端不应该被迫依赖于它们不用的接口 
  接口应该仅包含必要的方法,而不该包含其它的。比如: 
   
  注意到IBird接口包含很多鸟类的行为,包括Fly()行为.现在如果一个Bird类(如Ostrich鸵鸟)实现了这个接口,那么它需要实现不必要的Fly()行为(Ostrich不会飞). 这个”胖接口”应该拆分未两个不同的接口,IBird和IFlyingBird,IFlyingBird继承自IBird. 这里如果一种鸟不会飞(如Ostrich),那它实现IBird接口。如果一种鸟会飞(如KingFisher),那么它实现IFlyingBird 
    
  5. 依赖倒置原则 
  高层模块不应该依赖底层模块,两者都应该依赖其抽象。 
  比如说一个汽车类: 
  class Car{ 
     AmericanEnginee e; //这样是不对的,应该依赖于接口,必须写成IEngine e; 
  } 
  如果代码中不用依赖倒置,我们将面临如下风险: 
  ● 使用低级类会破环高级代码; 
  ●当低级类变化时需要很多时间和代价来修改高级代码; 
  ● 产生低复用的代码; 
 
    
  除SOLID原则外还有很多其它的面向对象原则。如: 
  “组合替代继承”:这是说相对于继承,要更倾向于使用组合; 
  “笛米特法则”:这是说”你的类对其它类知道的越少越好”; 
  “共同封闭原则”:这是说”相关类应该打包在一起”; 
  “稳定抽象原则”:这是说”类越稳定,越应该由抽象类组成”;

关于面向对象的原则还可参考:http://www.iteye.com/news/24488

面向对象设计SOLID五大原则的更多相关文章

  1. Java成长第五集--面向对象设计的五大原则

    S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则(Programming Priciple)的首字母缩写.以下图说明: 下面就个人的理解来说说这五大原则的含义到 ...

  2. # 61条面向对象设计的经验原则-《OOD启思录》Arthur J.Riel

    61条面向对象设计的经验原则-<OOD启思录>Arthur J.Riel 原文 http://blog.csdn.net/cpluser/article/details/129291 61 ...

  3. [设计原则与模式] 面向对象程序设计之五大原则(SOLID)

    cp from:  https://blog.csdn.net/zhangbuzhangbu/article/details/51719952 S.O.L.I.D是面向对象设计和编程(OOD& ...

  4. Delphi面向对象设计的经验原则(61条)

    (1)所有数据都应该隐藏在所在的类的内部. (2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者. (3)尽量减少类的协议中的消息. (4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深 ...

  5. C#面向对象设计的七大原则

    本文我们要谈的七大原则,即:单一职责,里氏替换,迪米特法则,依赖倒转,接口隔离,合成/聚合原则,开放-封闭 . 1.   开闭原则(Open-Closed Principle, OCP) 定义:软件实 ...

  6. PHP面向对象设计五大原则(SOLID)梳理总结

    PHP设计原则梳理,参考<PHP核心技术与最佳实践>.<敏捷开发原则.模式与实践>,文章PHP面向对象设计的五大原则.设计模式原则SOLID 单一职责原则(Single Res ...

  7. S.O.L.I.D五大原则之单一职责SRP

    转自 : 汤姆大叔的blog Bob大叔提出并发扬了S.O.L.I.D五大原则,用来更好地进行面向对象编程,五大原则分别是: The Single Responsibility Principle(单 ...

  8. 深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP

    前言 Bob大叔提出并发扬了S.O.L.I.D五大原则,用来更好地进行面向对象编程,五大原则分别是: The Single Responsibility Principle(单一职责SRP) The ...

  9. OO的五大原则:SRP、OCP、LSP、DIP、ISP

    OO的五大原则是指SRP.OCP.LSP.DIP.ISP. SRP -- (Single Responsibility Principle 单一职责原则) OCP--开闭原则(Closed for M ...

随机推荐

  1. (笔记)angular 多选按钮

  2. java中使用mysql

    executeUpdate:是最基础的数据库的更新.插入和删除操作.效率低下.executeQuery:是最基础的执行查询语句,同样也是效率低下.execute:兼具上面二者的功能但返回一个boole ...

  3. Bypass pattern lock on Sony Xperia Z2 and backup all data

    Yesterday she came to me with a Sony Xperia Z2 D6503. Guess what? She forgot the pattern so she coul ...

  4. 解决win 7&win xp等系统无法正常用U盘安装或启动

    目前,制作启动U盘通常是用ultraiso,但由于各种硬件设备与系统的更新,导致现在装系统会出现各种错误. 在用ultraiso制作的启动U盘,装XP时,可能找不到引导项:装win7时,可能提示”wi ...

  5. Idea基本设置

    1.idea 如何更改比编辑器文本字体和大小 换上了intellij idea之后,第一件事就是想要改变下文字字体,因为在我这个27寸的2k分辨率的屏幕上,文字显然太小了. intellij idea ...

  6. Kettle 合并记录报错!

    在Kettle的合并记录过程的时候,在“为了转换解除补丁开始 ”这一步的时候报错.具体错误如图所示: Kettle的转换如图所示: 问题原因:可能是你的数据库链接驱动和Kettle的版本不兼容. 解决 ...

  7. HttpClient Post Form data and get Response String

    DefaultHttpClient httpclient = new DefaultHttpClient(); HttpPost httpost = new HttpPost("http:/ ...

  8. Java 连接MongoDB

    1.驱动 通过java连接MongoDB需要一个java版的驱动 下载地址:http://mongodb.github.io/mongo-java-driver/ 2.连接MongoDB 通过 com ...

  9. spark概论,补充

    基本概念 RDD spark最大的亮点是提出RDD(Resilient Distributed Dataset)的概念,也就是可伸缩的分布式数据集合,本身只读,可恢复.spark本身不做物理储存,通过 ...

  10. 关于VS2012下安装破解文件Visual Assit X的一点说明

    今天在使用Visual Studio 2012的时候,编写代码的助手Visual Assit X突然提示我说,试用期已过,要求我输入一个注册码,我靠,这货不是几个月前已经破解了吗,怎么今天傻不愣登的提 ...