• 30 . (Java)面向对象编程六大基本原则


    六大基本原则可分为:SOLID和迪米特原则

    1.单一职责原则S——优化代码的第一步

    Single Responsibility Principle,简称SRP

    定义:一个类只负责一项职责。

    好处:降低类的复杂度,一个类只负责一个职责,其逻辑一定会比一个类负责多项职责要简单,同时也易于维护,提高类的可读性,提高系统的可维护性。如果单一职责原则遵守的好,那么当修改一个功能时可以显著降低对其它功能的影响。

    note: 虽说我们要遵守单一职责原则,但是也不是说死板的对每一个细节都严格遵守,也要视情况而定:如果一个类的逻辑非常简单且可以保证变化极小,此时可以在代码级别上违反单一职责原则;另外当一个类中方法很少时,也可以在方法的级别上违反这一原则。(这里我这么理解单一职责原则:分为两个层次,最高层次是类的层次,其次是方法层次上)但是如果一个类相对庞大,类中方法较多时,一定要遵守单一职责原则;宁愿在第一次扩展时花费精力完成重构,也要遵守这一原则,否则会给以后的扩展带来不可预估的灾难!

    2.开闭原则O——让程序更稳定、更灵活

    Open Close Principle,简称OCP 
    定义:软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是,对于修改是封闭的

    在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。

    3.里氏替换原则L——构建扩展性更好的系统

    Liskov Substitution Principle,简称LSP
    定义:所有引用基类的地方必须能透明地使用其子类的对象

    里氏替换原则的严格表达是:如果对每一个类型为T1的对象O1,都有类型为T2的对象O2,使得以T1定义的所有程序P在所有的对象o1都替换成o2时,程序P的行为没有变化,那么类型T2是类型T1的子类型。

    比如:假设有两个类,一个是Base类,另一个是Derived类,并且Derived类是Base类的子类。那么一个方法如果可以接收一个基类对象b的话:method1(Base b),那么它必然可以接受一个子类对象b,也即可以有method1(d).

    4.接口隔离原则I——系统有更高的灵活性

    InterfaceSegregation Principles,简称ISP
    定义:类间的依赖关系应该建立在最小的接口上

    使用多个专门的接口比使用单一的总接口要好。

    一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。
    “不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。”这个说得很明白了,再通俗点说,不要强迫客户使用它们不用的方法,如果强迫用户使用它们不使用的方法,那么这些客户就会面临由于这些不使用的方法的改变所带来的改变。

    5.依赖倒置原则D——让项目拥有变化的能力

    Dependence Inversion Principle,简称DIP
    依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。

    6.迪米特原则——更好的可扩展性

    Law of Demeter,简称LOD
    定义:一个对象应该对其他对象有最少的了解

    广义的迪米特法则在类的设计上的体现:
    优先考虑将一个类设置成不变类。
    尽量降低一个类的访问权限。
    谨慎使用Serializable。
    尽量降低成员的访问权限。
     
     
     
    暂时介绍一些基本的概念,具体这些原则也会体现在我们的设计模式中。后面边学习边更新这边文章举例。
     
     
     

    参考文献:

    《Java与模式》

    https://blog.csdn.net/qq_26440221/article/details/53746433

    https://blog.csdn.net/niudasheng/article/details/80595217

  • 相关阅读:
    python运维之saltstack方式
    windows下使用vim
    django-redis中文文档
    Skipping GMP tests ([WinError 126] 找找不不到到指指定定的的模模块块。。)
    python pycryptodome库,及后台支付宝功能接入
    关于python时间相关的函数记录集合
    mysql练习题博客集
    mysql -uroot -p -P3306 -h192.168.0.111无法远程连接mysql
    报错 Storing debug log for failure in /root/.pip/pip.log
    多进程 库multiprocessing
  • 原文地址:https://www.cnblogs.com/Hermioner/p/10211477.html
Copyright © 2020-2023  润新知