前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OOP六大原则

OOP六大原则

原创
作者头像
用户7257200
修改2020-05-06 15:28:11
6020
修改2020-05-06 15:28:11
举报
文章被收录于专栏:Effective Objective C

最近面试字节跳动的时候,被问起面向对象编程的六大原则,想来已经忘光了,重新复习整理一下。

单一职责

《大话设计模式》里面由一部手机抓拍飞碟的案例引入,讲解了无论是工业设计还是代码设计,只有专一才能做得更好。此话也许并不适合正在高速发展迭代的智能手机,而对于代码设计来说,确实如此。

类的设计应该小而美,功能专一,易于复用和重构。

开闭原则

开闭原则,讲的是在类的设计理念上,哪些行为是允许的,哪些行为是不允许的。而对于一个类的设计,其功能并不是从一而终的,其随着业务更迭需要其实时改变。因此,对于类的设计,为了线上功能的稳定,不应当对以往的功能进行变动,而是应当在能支撑新业务的情况下,易于扩展类的功能,达到类可维护、可扩展、扩复用的目的。

里氏替换

里氏替换是Liskov女士提出的,在类的设计中,子类型必须能够替换父类型。如果一个子类的设计无法替换该父类型,则该子类无法继承原父类。

依赖倒置

依赖倒置指的是,在类的设计上,应当面向接口编程,而不是面向实现。

那为何叫“依赖倒置”?其名字由来于,在一般编程的思想中,我们习惯直接调用已有的开源库、系统库的函数进行实现——高层模块依赖底层模块。如果没有面向接口编程,当某一天,底层模块需要支持新的硬件或者功能,就会对现有的函数进行更改。因此,依赖于底层模块的高层模块也应一并修改。此过程中可能引入不必要的工作和问题。而如果面向接口编程,底层模块针对接口,对现有函数的逻辑进行修改,高层模块也不需要感知到底层模块的修改。

接口隔离

接口隔离指的是,在接口的设计中,应当杜绝不必要的接口。

例如,接口I的设计如下图:

接口I的设计,类A/类B/类C/类D各自针对接口的实现[1].png
接口I的设计,类A/类B/类C/类D各自针对接口的实现[1].png

类A通过接口I的方法1/2/3依赖类C,类B通过接口I的方法1/4/5依赖类D。对于类C来说,方法4/5是不需要的;对于类D来说,方法2/3是不需要的。如果在大量具体的案例中,方法2/3与方法4/5被证实是无法同时存在的,那么我们就可以考虑接口隔离,将其作为两种不同的接口进行设计。

迪米特法则

迪米特法则讲的是,在类的设计中,调用类不需要知道被调用类的内部实现或者具体的实例对象。

例如,在iOS中,当一个类需要利用GCD实现多线程编程,其无需知道GCD内部如何管理线程,也无需知道具体由哪个线程运行设计的编程逻辑。

引用

[1] 设计模式六大原则(4):接口隔离原则 https://blog.csdn.net/zhengzhb/article/details/7296921

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 单一职责
  • 开闭原则
  • 里氏替换
  • 依赖倒置
  • 接口隔离
  • 迪米特法则
    • 引用
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档