末世苍雪

root@jtahstu.com   Github  

最新碎语:这个M1 MBP, PHP多版本环境装的我极度崩溃, 历时4个小时终于搞定了. 1. brew转不了7.x的环境, 默认只能装8.1, 恶心. 2. Nginx装上了, 但是请求转发不到php-fpm上, 试了各种配置都不行, 删掉Nginx转战Apache, 吐了. 3. 系统自带httpd, brew能装上httpd但搞死启动不了httpd, 只能手动启动和关闭httpd, 无语. 4. 以上问题都解决后, 加上自己写的启动和关闭脚本, 目前能正常跑起来PHP文件了, 开心! 为啥目前没有开源好用的M1 MNMP环境哇, o(≧口≦)o

您的位置:末世苍雪 >笔记> 设计模式 - 五大设计原则

设计模式 - 五大设计原则

oop.jpeg

论排版的重要性:https://www.zybuluo.com/jtahstu/note/913749

《PHP核心技术与最佳实践》 - 读书笔记

读书笔记


2 面向对象的设计原则

2.1 面向对象设计的五大原则

2.1.1 单一职责原则(Single Pesponsibility Principle,SRP)

  1. 一个是避免相同的职责分散到不同的类中,另一个是避免一个类承担太多责任
  2. 可以减少类之间的耦合,提高类的复用性
  3. 工厂模式允许你在代码执行时实例化对象
  4. 命令模式也是 SRP 的体现,命令模式分离“命令的请求者”和“命令的实现者”方面的职责
  5. 代理模式也体现了 SRP
  6. SRP 不只是对类设计有意义,对以模块、子系统为单位的系统架构设计同样有意义

2.1.2 接口隔离原则(Interface Segregation Principle,ISP)

  1. 客户端不应该是被迫实现一些他们不会使用的接口
  2. 一个类对另一个类的依赖性应当是建立在最小的接口上的
  3. 接口污染就是为接口添加不必要的职责
  4. “接口隔离”其实就是定制化服务设计的原则,使用接口的多重继承实现对不同的接口的组合,从而对外提供组合功能 -- 达到“按需提供服务”
  5. 对于接口的污染 
    • 利用委托分离接口
    • 利用多继承分离接口

2.1.3 开放-封闭原则(Open-Close Principle,OCP)

  1. Open,模块的行为必须是对外开放的、支持扩展的,而不是僵化的
  2. Closed,在对模块的功能进行扩展时,不应该影响或大规模的影响已有的程序模块
  3. 核心思想就是对抽象编程,而不对具体编程,因为抽象相对稳定
  4. 在设计方面充分应用“抽象”和“封装”的思想
  5. 在系统功能编程方面应用面向接口的编程

2.1.4 里式替换原则(Liskov Substitution Principle,LSP)

  1. 子类必须能替换成他们的基类
  2. 子类型必须能够替换掉他们的父类型、并出现在父类能够出现的任何地方。它指导我们如何正确的进行继承与派生,并合理的重用代码
  3. LSP 主要是针对继承的设计原则
  4. 如何遵守该设计原则呢? 
    • 父类的方法都要在之类中实现或重写,并且派生类只实现其抽象类中声明的方法,而不应当给出多余的方法定义或实现
    • 在客户端程序中只应该使用父类对象而不应当直接使用之类对象,这样可以实现运行期绑定(动态多态)
  5. PHP 对 LSP 的支持并不好,缺乏向上转型等概念

2.1.5 依赖倒置原则(Dependence Inversion Principle,DIP)

  1. 上层模块不应该依赖下层模块,它们共同依赖于一个对象(父类不能依赖子类,它们都要依赖抽象类)
  2. 抽象不能依赖于具体,具体应该依赖于抽象
  3. 专门由一个程序检测配置是否正确(如所依赖的类文件是否存在)以及加载配置所依赖的实现,这个检测程序,就称为IOC容器
  4. 一般认为,依赖注入(DI)和依赖查找(DS)是 IOC 的两种实现

2.3 面向对象的思考

  1. PHP 不是一门很好的面向对象的语言,因为其无法做到完全面向对象,也无法优雅实现面向对象。
  2. 在 PHP 的开发中应该灵活使用面向对象的特性和设计原则
+
 2017-10-30 15:51 字数 2677 阅读 11



---

本文章采用 知识共享署名2.5中国大陆许可协议 进行许可,转载必须注明作者和本文链接。

---

二维码加载中...

扫一扫移动端访问O(∩_∩)O

发表评论

58 + 22 =
路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交
正在加载中……