SlideShare a Scribd company logo
1 of 16
面向对象设计的七大原则
商城研发部 – 徐宁
目标
• 高内聚
• 低耦合
• 可复用
• 可维护
面向对象设计的七大原则
• 开闭原则
• 单一职责原则
• 里氏替换原则
• 迪米特法则
• 依赖注入原则
• 接口分离原则
• 合成/聚合原则
原则一 开闭原则
定义
对扩展开放
对修改关闭
不变的部分加以抽象应对扩展(接口、抽象类)
接口最小功能设计原则
不足的部分可以通过定义新的接口来实现
模块之间的调用通过抽象接口进行
开闭原则具有理想主义色彩
其他几条原则,则可以看做是开闭原则的实现。
原则二 单一职责原则
定义
一个类只有一个引起它变化的原因
描述
把类拆分成最小的职能单位
目的
高内聚 低耦合 可复用 可组合
注意
职责划分无量化标准
原则三 里氏替换法则
定义
子类可以扩展父类的功能(扩展开放)
不能改变父类原有的功能(修改关闭)
描述
子类实现可以实现父类的抽象方法,但尽量不重写非抽
象方法
覆盖或实现父类的方法时输入参数可以被放大
覆盖或实现父类的方法时输出结果可以被缩小
注意
以父类定义的对象无法调用只存在于子类中的方法
父类尽量设计为抽象类或接口
原则三 里氏替换原则
• 输入参数可以被放大
原则三 里氏替换原则
• 输出结果可以被缩小
原则四 迪米特原则
定义
又叫最少知道原则,为了降低系统间调用的耦合度,可
以适量增加中介者类
描述
逻辑封装在内部
只提供的public方法,不泄露任何信息
模块之间通过接口通信
降低成员的访问权限
目的
降低依赖 低耦合
注意
大量传递调用的小方法会造成困扰并降低效率
原则五 依赖注入原则
定义
要依赖于抽象,不要依赖于具体的实现
面向接口编程
描述
低层模块尽量都要有抽象类或接口
变量的声明类型尽量是抽象类或接口
使用继承时遵循里氏替换原则
方法
通过构造函数传递依赖对象
通过setter方法传递依赖对象
接口声明实现依赖对象,也叫接口注入
原则六 接口分离原则
定义
客户端不应该依赖它不需要的接口
一个类对另一个类的依赖应该建立在最小的接口上
描述
低层模块尽量都要有抽象类或接口
变量的声明类型尽量是抽象类或接口
使用继承时遵循里氏替换原则
方法
将臃肿的接口拆分为独立的几个接口
注意
要适度,不要过大,但也别太小
原则六 接口分离原则
不好的接口
原则六 接口分离原则
好的接口
原则七 合成/聚合原则
定义
尽量使用对象组合,而不使用继承来达到复用的目的
扩展的时候用继承,复用的时候用关联
描述
继承复用的缺点
 破坏封装性。不管想用的不想用的方法全部都继承了。无法
实现选择性继承。
 如果想要更换父类,必须修改源代码,违背了开闭原则。
组合聚合是引用其他的类的方法
注意
就是系统中会有较多的对象需要管理
面向对象设计的七大原则
 总结
 原则在设计模式中体现

More Related Content

More from 诸葛修车网-诸葛商城 (11)

设计模式-单例、享元、工厂与抽象工厂
设计模式-单例、享元、工厂与抽象工厂设计模式-单例、享元、工厂与抽象工厂
设计模式-单例、享元、工厂与抽象工厂
 
单元测试(Unit Test)- Spock应用
单元测试(Unit Test)- Spock应用单元测试(Unit Test)- Spock应用
单元测试(Unit Test)- Spock应用
 
Maven技术及诸葛商城应用(1)
Maven技术及诸葛商城应用(1)Maven技术及诸葛商城应用(1)
Maven技术及诸葛商城应用(1)
 
Push-推送技术
Push-推送技术Push-推送技术
Push-推送技术
 
Sonar java -Write Clean Code,Detect Bugs
Sonar java -Write Clean Code,Detect BugsSonar java -Write Clean Code,Detect Bugs
Sonar java -Write Clean Code,Detect Bugs
 
Nginx+tomcat https 配置
Nginx+tomcat  https 配置Nginx+tomcat  https 配置
Nginx+tomcat https 配置
 
如何更好地设计测试用例-BQConf
如何更好地设计测试用例-BQConf如何更好地设计测试用例-BQConf
如何更好地设计测试用例-BQConf
 
App开发过程的演变之路
App开发过程的演变之路App开发过程的演变之路
App开发过程的演变之路
 
浅谈项目管理(诸葛B2B电商研发部版改)
浅谈项目管理(诸葛B2B电商研发部版改)浅谈项目管理(诸葛B2B电商研发部版改)
浅谈项目管理(诸葛B2B电商研发部版改)
 
Java多线程技术
Java多线程技术Java多线程技术
Java多线程技术
 
Git基础培训
Git基础培训Git基础培训
Git基础培训
 

面向对象设计原则