`
geeksun
  • 浏览: 953869 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式六大基础原则

 
阅读更多

1. 单一职责原则:(Single Responsibility Pinciple)

       一个类只负责一项职责,就负责一件事情。 当超过一项职责需要负责时,需要增加新的类来负责新的职责,而不是在类中增加新的代码。

      如果一个类承担的职责太多,就是高度地职责耦合,非常不利于扩展功能。这是非常脆弱的设计。容易发生修改一个地方而影响其他地方的情况。

遵循单一职责原则的优点:
  • 降低类的复杂度
  • 提高类的可读性,提高系统的可维护性
  • 变更引起的风险降低

2.  里氏代换原则:子类可以扩展父类的功能,但不能改变父类原有的功能。

包含4层含义:

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

不遵循里氏代换原则的后果是,写代码出错的机率会大大增加。

 

3.  依赖倒置原则:(Dependence Inversion)高层模块不应依赖低层模块,两个都应依赖于抽象。

        抽象不应该依赖于具体,具体应该依赖于抽象。

        依赖倒置原则基于这样一个事实:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建起来的架构比以细节为基础搭建起来的架构要稳定的多。在java中,抽象指的是接口或者抽象类,细节就是具体的实现类,使用接口或者抽象类的目的是制定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。

       依赖倒置原则的核心思想是面向接口编程, 而不是面向实现编程。

       在传统的开发架构中, controller-->service-->dao,就遵循了依赖倒置原则。 controller调用service的是API,service调用dao也是调用API。这样,API中的实现细节变化,不会影响API的调用者。

 

4.  迪米特原则:一个对象应该对其他对象保持最少的了解。

又叫最少知道原则。

通俗地说,就是一个类对自己依赖的类知道的越少越好。

也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息。

迪米特法则还有一个更简单的定义:只与直接的朋友通信。

软件编程的总原则:低耦合,高内聚。

无论是面向过程编程还是面向对象编程,只有使各个模块之间的耦合尽量的低,才能提高代码的复用率。

 

迪米特原则为了降低类与类之间的耦合。

 

5.  开闭原则: 对扩展开放,对修改关闭。

      一个软件实体,如类、模块和函数,对扩展开放,对修改关闭。

问题由来:在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。

解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

 

      开闭原则无非就是想表达这样一层意思:用抽象构建框架,用实现扩展细节。因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节,我们用从抽象派生的实现类来进行扩展,当软件需要发生变化时,我们只需要根据需求重新派生一个实现类来扩展就可以了。当然前提是我们的抽象要合理,要对需求的变更有前瞻性和预见性才行。

 

      前面说的5项原则,恰恰是告诉我们用抽象构建框架,用实现扩展细节的注意事项而已:单一职责原则告诉我们实现类要职责单一;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合。而开闭原则是总纲,他告诉我们要对扩展开放,对修改关闭。

分享到:
评论

相关推荐

    GOF的23种设计模式,及设计模式的六大原则

    GOF是设计模式的经典名著Design Patterns: Elements of Reusable Object-Oriented Software(中译本名为《设计模式——可复用面向...他们总结了23个设置模式,以下将给出这23个设计模式的说明,及设计模式的六大原则.

    24种设计模式介绍与6大设计原则

    二、设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序...

    设计模式和原则(很实用)

    讲解:GRASP (职责分配原则),GRASP是学习使用设计模式的基础;讲解:设计原则,设计原则是设计模式的灵魂。

    23种 设计模式---面向对象的基本原则

    NULL 博文链接:https://hudeyong926.iteye.com/blog/779070

    设计模式之六大原则

    要设计出强壮的架构,写出优质的代码,必须遵循的六大基本原则

    设计模式Demo

    二、设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序...

    设计模式整体框架与结构

    原则:设计模式遵循六大原则,包括开闭原则、里氏替换原则、依赖倒置原则等,这些原则指导开发者如何正确地应用设计模式。 常用模式:例如单例模式、工厂模式、观察者模式等,每种模式都有其特定的应用场景和解决的...

    Java23种基本的设计模式整料整理学习源码示例zip

    设计模式的六大原则 开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好...

    DesignPattern:java常用的23种设计模式,以及设计原则

    1.2 六大原则 单一职责:方法、类、接口单一 里氏替换:父类出现的地方都能透明的使用其子类 覆盖或者实现父类的方法数输入参数可以被放大 覆盖或者实现父类的方法时返回值类型可以被缩小 依赖倒置:面向接口编程...

    Java学习手册

    这款应用面向所有想学习Java或正在学习Java的朋友们,适用于初学者和有一定java开发经验的朋友们。...3,设计模式模块,介绍了设计模式六大原则,并分别介绍了创建型、结构型、行为型设计模式。 4,java 进阶模块…...

    java-patterns:Java 23种基本的设计模式整料整理学习,责任链模式过滤器,工厂模式BeanFactory,观察者模式ContextListen等。结合Spring源码理解学习

    设计模式的六大原则 开闭原则(Open Close Principle)开闭原则就是说对扩展开放,对修改关闭。在程序需要进行扩展的时候,不能去修改初始化的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性...

    安卓java读取网页源码-JavaPattern:Java设计模式

    设计模式的六大原则 开闭原则 对扩展开放, 对修改关闭; 在程序需要进行扩展的时候, 不能去修改原有的代码, 实现一个热插拔效果. 是为了使程序的扩展性好, 易于维护和升级. 想要到达这种效果, 需要使用接口和抽象类; ...

    design_pattern:关于设计模式的理解

    设计模式的六大原则1、开闭原则(Open Close Principle)开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,...

    《闻缺陷则喜》之《软件开发的那些人》 20230917

    软件团队的那些人(理论) 4 ...6.1. 设计模式六大原则 44 6.2. 设计模式 45 6.3. 反模式 46 6.4. 模块划分、公共数据、资源设计、接口 46 6.5. 界面设计 49 6.6. 数据存储设计 49 6.7. 工时预估与工作

    asp.net知识库

    2分法-通用存储过程分页(top max模式)版本(性能相对之前的not in版本极大提高) 分页存储过程:排序反转分页法 优化后的通用分页存储过程 sql语句 一些Select检索高级用法 SQL server 2005中新增的排序函数及应用 ...

    java学习手册

    3,设计模式模块,介绍了设计模式六大原则,并分别介绍了创建型、结构型、行为型设计模式。 4,java 进阶模块,在java基础内容上进一步详细介绍了多线程,集合框架,以及JVM内存管理,并收录java中容易使人迷惑的...

    Jetpack-Mvvm:使用Jetpack全家桶+ Kotlin实现的Android社区App加音乐播放器。不写晦涩难懂的代码,尽量标清每一行注释,严格遵守六大基本原则,大量运用设计模式,此项目可快速帮你入手Kotlin ,Jetpack。如果觉得对你有帮助,右上角点个star,先前谢过:watermelon::watermelon::watermelon:

    经常写一大堆早期了解了Jetpack模式下的MVVM ,在LiveData、ViewModel、DataBinDing的加持下实现了单向依赖和数据绑定,代码量大幅度减少,根据Jetpack的特性项目稳定性也提升了过多。为了更深入的理解Jetpack中各个...

    深入PHP面向对象、模式与实践 (第2版)

    目录: 第一部分 介绍第1章 PHP:设计与管理第二部分 对象第2章 PHP与对象第3章 对象基础第4章 高级特性第5章 对象工具第6章 对象与设计第三部分 模式第7 章 什么是设计模式?为何使用它们第8章 模式原则第9章 生成...

    java基础学习

    面向对象程序设计与...对象容器类(第十一章),图形用户界面(第十二章),数据库编程(第十三章) ,多线程编程(第十四章) ,网络通信编程(第十五章) ,第十六章对面向对象设计原则与设计模式、分布式对象技术

    Android开发三剑客_part1

    状态图 活动图 对上述9种Diagram细致的学习 可使读者在分析 设计 开发Android程序时如虎添翼 游刃有余 中篇结合中国的历史文化和现代人的生活 采用轻松愉快的写作风格讲解Android中六大设计原则和基本的设计模式 ...

Global site tag (gtag.js) - Google Analytics