您的位置:首页 > 其它

面向对象的设计原则

2017-10-31 18:19 351 查看
原文链接 - 面向对象的设计原则

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 的开发中应该灵活使用面向对象的特性和设计原则
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: