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

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

    1.开闭原则

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

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

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

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

    2.单一职责原则

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

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

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

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

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

    3 里氏替换原则

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

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

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

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

    4.依赖倒置原则

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

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

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

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

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

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

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

  • 相关阅读:
    linux之awk命令
    HDU 2097 Sky数 进制转换
    HDU 2077 汉诺塔IV
    HDU 2094 产生冠军 dfs加map容器
    HDU 2073 叠框
    HDU 2083 简易版之最短距离
    HDU 2063 过山车 二分匹配
    天梯 1014 装箱问题
    天梯 1214 线段覆盖
    天梯 1098 均分纸牌
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/4556000.html
Copyright © 2011-2022 走看看