zoukankan      html  css  js  c++  java
  • 程序员七大面向对象设计原则

    在没有了解到面向对象设计的7大原则前,我只是一只豆子!   但豆子终将会成长不是吗? 

    1.开闭原则:一个软件实体应当对扩展开放,对修改关闭。也就是说在所涉及一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,即实现在不修改源代码的情况下改变这个模块的行为。

       在开闭原则的定义中,软件实体可以指一个软件模块、一个由多个类组成的局部结构或一个读库的类。

       抽象化是开闭原则的关键。

     是添加新代码完成方法的重构  而不是修改源代码

    声明: 本文源自   

    2.依赖倒转原则:高层模块不应该依赖低层模块,他们都应依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。

            要针对接口编程,不要针对实现编程。
            代码要依赖于抽象的类,而不要依赖于具体的类;要针对接口或抽象类编程,而不是针对具体类编程。
            实现开闭原则的关键是抽象化,并且从抽象化导出具体化实现,如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对
            象设计的主要手段。
            依赖倒转原则的常用实现方式之一是在代码中使用抽象类。而将具体类放在配置文件中
            依赖注入:构造注入:通过构造函数注入实例变量      设值注入:通过Setter方法注入视力变量      接口注入:通过接口方法注入实例变量

    声明: 本文源自  

    3.里氏替换原则: 子类出现在父类出现的位置,且不影响程序的运行。但是反过来就是父类对象是不能替换子类对象的。

             有了里氏替换原则,才使继承复用成为可能,

             子类可以在父类的基础上添加新的行为。(子类要比父类优秀)

                            子类型必须能替换掉他的父类型

     Pass :了解更多

    4.单一职责原则:一个对象应该只包含单一的职责,且该职责要被封装在具体的一个类中

            即一个类只做单一的事,避免繁杂类的出现,使得类的继承和重载更加的方便。

    耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送
    数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时
    表明其独立性越差。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。

     Pass :了解更多

     5.接口隔离原则:客户端不应该依赖于那些他不需要的接口。

            在使用接口的时候,为客户端提供指定的接口大小,按需分配,隐藏客户端不需要的接口。

            接口隔离原则是指:不使用单一的总接口,每一个接口应承担相对独立的角色。

            类应完全依赖相应的专门的接口。

    Pass:  了解更多

    6.合成复用原则 :尽量使用对象组合,而不是使用继承来达到复用的目的。

            一般来说使用继承的时候,要严格遵守里氏替换原则,基类的细节对于子类是可见的,这种方式属于静态的,

          减少了程序的灵活性如果基类发生改变,其子类也不得不随之变动。

            一般来说首先使用"组合/聚合" 降低类于类之间耦合度,减少类的变化对其他类的影响。

     合成复用原则 :就是在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分;新对象通过委派调用已有对象的方法达到复用功能的目的。简言之:复用时要尽量使用组合/聚合关系(关联关系),少用继承

    Pass 了解更多

    7.迪米特法则:一个软件实体尽可能少的和其他软件实体发生相互作用。

             减少对象与对象之间的直接交互,创建中间类, 通过中间类进行对象与对象间的间接交互,

           当我们需要增加或删除空间的时候,就只需在中间类中进行调整,无需修改已有控件的源代码。

          降低程序之间的耦合度,使类于类之间呈现松散的耦合关系。程序更加的灵活。

    灵活使用面向对象的准则,使我们的编程更加灵活,封装性更好,复用性更高,易于维护。

  • 相关阅读:
    SQL Server 2008中的hierarchyid
    SQL判断空值、nvl处理与JOIN的使用
    Transact-SQL语法速查手册
    MySQL连接字符串
    如何让spark sql写mysql的时候支持update操作
    基于calcite做傻瓜式的sql优化(三)
    基于calcite做傻瓜式的sql优化(二)
    基于calcite做傻瓜式的sql优化(一)
    spark升级:从1.6升级到2.4.6的记录
    彻底解决,sparkSQL读取csv中Map字段类型的问题
  • 原文地址:https://www.cnblogs.com/john69-/p/5235934.html
Copyright © 2011-2022 走看看