
论排版的重要性:https://www.zybuluo.com/jtahstu/note/913749
《PHP核心技术与最佳实践》 - 读书笔记
读书笔记
2 面向对象的设计原则
2.1 面向对象设计的五大原则
2.1.1 单一职责原则(Single Pesponsibility Principle,SRP)
- 一个是避免相同的职责分散到不同的类中,另一个是避免一个类承担太多责任
- 可以减少类之间的耦合,提高类的复用性
- 工厂模式允许你在代码执行时实例化对象
- 命令模式也是 SRP 的体现,命令模式分离“命令的请求者”和“命令的实现者”方面的职责
- 代理模式也体现了 SRP
- SRP 不只是对类设计有意义,对以模块、子系统为单位的系统架构设计同样有意义
2.1.2 接口隔离原则(Interface Segregation Principle,ISP)
- 客户端不应该是被迫实现一些他们不会使用的接口
- 一个类对另一个类的依赖性应当是建立在最小的接口上的
- 接口污染就是为接口添加不必要的职责
- “接口隔离”其实就是定制化服务设计的原则,使用接口的多重继承实现对不同的接口的组合,从而对外提供组合功能 -- 达到“按需提供服务”
-
对于接口的污染
-
利用
委托
分离接口 -
利用
多继承
分离接口
-
利用
2.1.3 开放-封闭原则(Open-Close Principle,OCP)
- Open,模块的行为必须是对外开放的、支持扩展的,而不是僵化的
- Closed,在对模块的功能进行扩展时,不应该影响或大规模的影响已有的程序模块
- 核心思想就是对抽象编程,而不对具体编程,因为抽象相对稳定
- 在设计方面充分应用“抽象”和“封装”的思想
- 在系统功能编程方面应用面向接口的编程
2.1.4 里式替换原则(Liskov Substitution Principle,LSP)
- 子类必须能替换成他们的基类
- 子类型必须能够替换掉他们的父类型、并出现在父类能够出现的任何地方。它指导我们如何正确的进行继承与派生,并合理的重用代码
-
LSP 主要是
针对继承
的设计原则 -
如何遵守该设计原则呢?
- 父类的方法都要在之类中实现或重写,并且派生类只实现其抽象类中声明的方法,而不应当给出多余的方法定义或实现
- 在客户端程序中只应该使用父类对象而不应当直接使用之类对象,这样可以实现运行期绑定(动态多态)
- PHP 对 LSP 的支持并不好,缺乏向上转型等概念
2.1.5 依赖倒置原则(Dependence Inversion Principle,DIP)
- 上层模块不应该依赖下层模块,它们共同依赖于一个对象(父类不能依赖子类,它们都要依赖抽象类)
- 抽象不能依赖于具体,具体应该依赖于抽象
-
专门由一个程序检测配置是否正确(如所依赖的类文件是否存在)以及加载配置所依赖的实现,这个检测程序,就称为
IOC容器
-
一般认为,
依赖注入
(DI)和依赖查找
(DS)是 IOC 的两种实现
2.3 面向对象的思考
- PHP 不是一门很好的面向对象的语言,因为其无法做到完全面向对象,也无法优雅实现面向对象。
- 在 PHP 的开发中应该灵活使用面向对象的特性和设计原则
@jtahstu
2017-10-30 15:51
字数 2677
阅读 11
---
本文章采用 知识共享署名2.5中国大陆许可协议 进行许可,转载必须注明作者和本文链接。
---
发表评论