zoukankan      html  css  js  c++  java
  • OO的设计原则

    今天同事和我们一起讨论分享了OO的设计原则,讨论使人明晰,有人一起讨论学习是一件幸福的事情。

    1.开闭原则

    对功能的扩展是开放的,对修改是闭合的。

    可以应用于类的设计,框架的设计等。

    为什么?开闭原则有利于保护已有的客户端代码,让原有的代码不会因为框架的扩展修改而发生变动,减少维护的成本。

    如果你设计的框架经常变动,而且每次变动使使用的人要改很多,那么没人敢用了。

    2.单一职责原则

    应用于实现类,如果类有变化,那么引起变化的原因仅有一个

    为什么?如果你在设计类的时候,没有进行接口拆分设计,直接封装类的属性和接口,也无可厚非。

    但如果你对属类归类,对行为划分归类,可以减少某些方法改变引起整个类改变的风险。提高可维护性。

    但这样往往增加了设计的复杂性,在实际应用中常常很难做到。

    例如一个user类,拆分成两个接口,一个是user的属性信息(类或接口),一个是user的方法信息(接口)

    3 里氏替换原则

    所有使用基类的地方都可以透明地使用子类进行替换。

    子类可以扩展父类的功能,但不能改变父类原有的功能。

    • 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
    • 子类中可以增加自己特有的方法。
    • 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
    • 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

    如果违反,可能会无意中使代码犯错。

    4.依赖倒置原则

    类的属性设计,成员变量不使用具体的类,而使用接口。

    类方法的设计,方法参数使用接口或基类,不使用实现类。

    这样面向抽象进行设计,减少了耦合性。

    这里的依赖倒置原则,不是依赖注入(IOC)。

    依赖注入是提供一种方法获取类所依赖的属性对象。譬如通过setter方法,通过构造器方法等。

    把依赖注入到类中。这在spring中广泛使用。

    总之,OO就是面向抽象编程(接口或抽象性),减少了类之间的耦合度。提高了复用性和可维护性。

  • 相关阅读:
    Hadoop_HDFS文件读写代码流程解析和副本存放机制
    Hadoop_MapReduce流程
    Hadoop_YARN框架
    Spark任务流程笔记
    3D俄罗斯方块设计
    Hadoop_FileInputFormat分片
    二叉查找树的懒惰删除(lazy deletion)
    数组的三种随机排序方法
    SpringBoot @Async 异步处理业务逻辑和发短信逻辑
    json字符串转java对象
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/4556000.html
Copyright © 2011-2022 走看看