S = Single Responsibility Principle 单一职责原则
O = Opened Closed Principle 开放闭合原则 
L = Liscov Substitution Principle Liscov替换原则
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://w3croom.com/read.php?tid-4522.html

最新文章

  1. JavaScript随笔3
  2. html 设置宽度100% 块状元素往下调解决方法
  3. iOS - 在工程中试玩状态模式
  4. asp.net三层架构详解
  5. HTML 学习笔记 CSS(选择器4)
  6. ArcGIS Runtime for Android 使用异步GP服务绘制等值线
  7. PBOC2.0与PBOC3.0的区别
  8. sqlite3使用简介(内含解决sqlite内存的方法)
  9. SpringMVC + Spring + MyBatis 学习笔记:遭遇order by 排序问题
  10. Python脚本控制的WebDriver 常用操作 <十八> 获取测试对象的css属性
  11. 设计模式——工厂模式 (C++实现)
  12. PHPStorm&PHPstudy环境配置
  13. PHP集成环境自定义设置PHP版本,同时运行多个php版本,700个PHP版本随时切换,一键开启常用模块。
  14. 简单查询plan
  15. maven引入本地jar 打jar包
  16. PHP二维数组(或任意维数组)转换成一维数组的方法汇总(实用)
  17. 【linux】硬盘原理简介和分区
  18. 20190402Linux常用命令week1.1
  19. Hibernate一对多单向关联和双向关联映射方法及其优缺点 (待续)
  20. mysql 数据操作 多表查询 多表连接查询 笛卡尔积

热门文章

  1. OpenCV 最小二乘拟合方法求取直线倾角
  2. 吴柄锡 github----MHA helper
  3. 计算机体系结构-CPU
  4. CentOS iSCSI客户端使用配置
  5. c#中jeson字符串和OBJECT对象的相互转换
  6. mac 终端常见指令
  7. windows10UWP:Segoe MDL2 图标指南
  8. 用户输出表单处理php
  9. Castle Windsor 使MVC Controller能够使用依赖注入
  10. Ant配置