原创

OOP六大原则

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

单一职责

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

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

开闭原则

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

里氏替换

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

依赖倒置

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

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

接口隔离

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

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

接口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

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • OOP编程七大原则

    OCP(Open-Closed Principle),开放封闭原则:软件实体应该扩展开放、修改封闭。 实现:合理划分构件,一种可变性不应当散落在代码的很多角落里...

    sunsky
  • SOLID原则(OOD&OOP)

    SOLID原则是面向对象编程和面向对象设计的头五大原则。学习及应用这五大原则可以构建一个易于维护和扩展的应用程序,我们一起看看到底是那五大原则。

    小世界的野孩子
  • 设计模式六大原则(六)----开闭原则

    开放封闭原则(OCP,Open Closed Principle)是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化、降低耦合,而开放封闭原则正是对...

    用户7798898
  • [Code Design] 六大设计原则之`开闭原则`

    开闭原则是java世界里最基础的设计原则,它指导我们如何建立一个稳定,灵活的系统。开闭原则定义如下:

    架构探险之道
  • 六大设计原则(C#)

    如果一个模块需要修改,它肯定是有原因的,除此原因之外,如果遇到了其他情况,还需要对此模块做出修改的话,那么就说这个模块就兼具多个职责。举个栗子:

    梁规晓
  • 设计模式六大原则(6):开闭原则

    定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。 问题由来:在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧...

    Angel_Kitty
  • 设计模式六大原则

      单一职责原则又称为单一功能原则,即不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。

    那一叶随风
  • 六大原则 动态代理

    代理模式中,中介类与委托类的关系,在编写中介类时就确定了。中介类会控制对委托类对象的访问,。 装饰者模式的装饰关系是在运行时才知道,比如下面的代码。

    平凡的学生族
  • 接口设计六大原则

    子勰
  • 图表设计六大原则

    数据的准确性和完整性是第一位的,不要为了美化或偏袒而歪曲混淆信息。要保证数据清晰和透明。

    Banber可视化云平台
  • 设计模式的六大原则

    单一职责原则: 定义:不要存在多于一个导致类变更的原因。 通俗地说:一个类只负责一项职责。 问题来源:一个类T负责两个职责:职责1和职责2,当因为职责1因需求变...

    用户1134788
  • 设计模式的六大原则

    qubianzhong
  • 设计模式之 六大原则

    定义: 一个类承担的职责不宜过多,或者说就一个类而言,应该仅有一个引起它变化的原因

    用户3094376
  • 六大设计原则之`迪米特法则`

    迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽...

    架构探险之道
  • 设计模式六大原则(2):里氏替换原则

    SpringCloud实战视频下载 肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑。其实原因就是这项原则最早是在1988年,由麻省理工学院的...

    企鹅号小编
  • 设计模式六大原则——单一职责原则(SRP)

          就一个类而言,应该仅有一个引起它变化的原因。通俗的说,一个类只负责一项职责。

    令仔很忙
  • 设计模式六大原则——开放封闭原则(OCP)

          1、对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。

    令仔很忙
  • 设计模式六大原则---依赖倒置原则(DIP)

        依赖倒置原则告诉我们:细节是多变的,而抽象是相对稳定的。所以我们编程的时候要注重抽象的编程,而非细节编程。

    令仔很忙
  • 设计模式六大原则——里氏替换原则(LSP)

           里氏替换原则(LSP,Liskov Substitution Principle)是关于继承机制的原则,是实现开放封闭原则的具体规范,违反了里氏替...

    令仔很忙

扫码关注云+社区

领取腾讯云代金券