`

Java设计模式中软件的设计原则篇

阅读更多

一、单一职责原则(Single Responsibility Principle--SRP)

就一个类而言,应该仅有一个引起它变化的原因。如果一个类的职责太多,就等于把这些职责耦合在一起,一个职责的变化可能会影响这个类其他职责能力,这种耦合就会导致脆弱的设计。当发生变化时,设计会遭受到意想不到的破坏。软件设计真正要做的,就是发现职责然后将这些职责相互分离。

那如何判断是否应该分离出类来?如果你能想到多余一个动机去改变这个类,那么这个类就有多余一个的职责,就应该考虑类的分离。

比如,我们在设计俄罗斯方块时候,因为界面逻辑表示只是根据数据去进行擦除和绘制,而游戏逻辑则控制方块的下落、旋转、碰撞等。

界面表示逻辑与游戏逻辑需要分离,这样不管你界面怎么换,游戏逻辑都可以复用。

 

二、开闭原则(Open Close Principle--OCP)

开闭原则就是说对扩展开放,对修改关闭。软件实体(类、模块、函数等)应该可以扩展,但是不可修改。在我们最初编写代码时,假设变化不会发生,当发生变化时,我们就创建抽象来隔离以后的变化。程序的改动是通过增加新的代码,而不是修改现有的代码。开闭原则是面向对象设计的核心所在。

比如,下图,如果我们按照下图上半部分设计代码,将运算过程放在客户端类中,那么后续扩展都需要修改客户端类。而下半部分,如果要增加减法计算,只需要新增减法操作类就行。



 

三、依赖倒转原则(Dependence Inversion Principle--DIP)

所谓依赖倒转(也叫倒置)原则(Dependence Inversion Principle),就是抽象不应该依赖细节,细节应该依赖于抽象。换句话说,我们要针对接口编程,而不是针对实现。

依赖倒转的原则的具体内容:

  • 高层模块不应该依赖于底层模块,两个都应该依赖于抽象
  • 抽象不应该依赖细节,细节应该依赖抽象

如何理解高层模块不应该依赖于底层模块呢?我们看下里氏代换原则,就能明白。

 

四、里氏代换原则(Liskov Substitution Principle--LSP)

里氏代换原则(Liskov Substitution Principle LSP)是Liskov 女士在1988年发表的,翻译过来简言之就是:子类型必须能够替换掉他们的父类型。只有当子类可以替换掉父类,软件单位的功能不受影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。如下图:


 

也正是由于子类型的可替换性才使得父类型在的模块在无需修改的情况下就可以扩展。反过头来理解下依赖倒置原则,是不是明白了?

 

 

 

五、接口隔离原则(Interface Segregation Principle)

客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。

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

一个类对另外一个类的依赖性应当是建立在最小的接口上的。

一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。

 

六、合成复用原则(Composite Reuse Principle)

在面向对象设计中,有两种基本的办法可以实现复用:

第一种是通过合成/聚合,即合成复用原则,含义是指,尽量使用合成/聚合,而不是使用继承。

第二种就是通过继承。

要正确地选择合成/复用和继承的方法是,只有当以下的条件全部被满足时,才应当使用继承关系:

合成复用原则就是指在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分;新对象通过委派调用已有对象的方法达到复用其已有功能的目的。简言之:要尽量使用组合/聚合关系,少用继承。比如我们在策略模式中,在CashContext类中持有了CashSuper类,而不是去继承它。



 

七、迪米特法则(Law of Demeter--LoD)

迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),它的解释是如果两个类不必直接通信,那么这两个类就不应该发生直接作用。如果一个类需要调用另外一个类的方法,可以通过第三者转发这个调用。也就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为:LoD。

迪米特法则的前提是在类的结构设计上,应该尽量降低成员的访问权限。迪米特法则的根本思想是强调了类之间的松耦合,也就是说类之间的耦合越弱,越有利于复用。

比如,小王入职,需要在IT部领电脑,他不需要认识IT部的任何人,通过前台一个电话:喂,IT部吗?请协助人员给小王配置电脑。

 

 

 

 

  • 大小: 97.4 KB
  • 大小: 178.4 KB
  • 大小: 36.9 KB
  • 大小: 80.9 KB
分享到:
评论

相关推荐

    Java设计模式精讲1

    Java设计模式精讲系列主要关注的是软件设计中的模式应用,以提高代码的可读性、可维护性和可扩展性。设计模式是经过时间考验的、解决常见问题的模板,是经验丰富的开发者们共享的最佳实践。在Java编程中,了解和掌握...

    java设计模式 pdf

    本篇文章将详细介绍几种常见的Java设计模式及其背后的原理,包括单一职责原则(SRP)、开放-封闭原则(OCP)、里氏替换原则(LSP)、依赖倒置原则(DIP)等。 #### 单一职责原则(SRP) **定义**:单一职责原则...

    java-javaee-软件工程-设计模式

    总结起来,"java-javaee-软件工程-设计模式"涵盖了软件设计的重要原则和最佳实践。设计模式的运用不仅提升了代码质量,也促进了团队之间的沟通与协作。在SSH2等框架的开发中,理解并熟练应用这些模式是成为专业Java...

    java方向设计模式浅析

    在阅读《设计模式浅析》这篇论文时,我们可以期待作者对这些模式的深入解析,包括它们的适用场景、如何在Java中实现,以及如何通过实例来理解它们的效果。此外,论文可能还会涉及设计原则,如开闭原则(对扩展开放,...

    java与设计模式ppt

    在Java中,设计模式尤其重要,因为它们帮助开发者遵循面向对象原则,如单一职责原则、开闭原则等。本篇主要介绍三种创建型设计模式:工厂模式、工厂方法模式和建造者模式。 1. **工厂模式**: 工厂模式是一种简单...

    Java设计模式中单一职责原则详解.rar

    其中,"单一职责原则"(Single Responsibility Principle,SRP)是面向对象设计的基本原则之一,也是Java设计模式中的重要组成部分。本篇文章将深入探讨单一职责原则的概念、意义、应用及其在Java编程中的实际运用。...

    Java多线程编程实战指南+设计模式篇

    本资源“Java多线程编程实战指南+设计模式篇”深入探讨了这两个主题,旨在帮助开发者提升其在并发编程和软件设计上的技能。 **一、Java多线程** 1. **线程基础**:Java中的线程是程序执行的最小单位。Java通过`...

    人人都懂设计模式 人人都懂设计模式

    在“经验篇”中,作者分享了自己在设计模式和软件开发方面的经验和看法,包括设计原则、项目重构等。 本书适合有一定编程基础的 IT 职场新人,对设计模式和编程思想感兴趣的人群。通过阅读本书,读者可以更好地理解...

    Java设计模式大全

    总结来说,Java设计模式大全这篇文章深入浅出地讲解了工厂模式的三个主要分类及其应用场景,通过对工厂模式的理解和应用,可以提高代码的质量和系统的可维护性,同时也符合软件开发的设计原则。

    Java设计模式教程 - Java设计模式 - 工厂模式

    Java设计模式是软件开发中的重要概念,它们是解决常见编程问题的经验总结,为代码组织提供了标准的结构和模式。工厂模式作为最常用的设计模式之一,是创建型模式的代表,它的主要目标是提供一个创建对象的接口,但让...

    设计模式之工厂模式Java实现和类设计图

    在软件开发中,设计模式是经验丰富的开发者们总结出的解决常见问题的模板或最佳实践。工厂模式作为其中的一种,是对象创建型模式,它的主要目的是为了隔离对象创建过程与客户端之间的关系,使得创建过程更加灵活,...

    java 设计模式

    总之,"Java设计模式"是软件开发中的重要组成部分,它们提供了一套通用的语言,使得开发者能够有效地交流和复用代码。无论是初学者还是经验丰富的开发者,都应该不断学习和掌握这些设计模式,以便在面临各种编程挑战...

    Java多线程编程实战指南 设计模式篇

    总之,《Java多线程编程实战指南 设计模式篇》会深入探讨如何将Java的多线程特性与经典的设计模式相结合,以提高软件的并发性能和可维护性。通过学习这本书,读者将能够更好地应对复杂并发场景,编写出高效且健壮的...

    java设计模式

    Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决常见问题的经验总结和最佳实践。设计模式并不提供具体的代码实现,而是提供了一种通用的解决方案模板,可以帮助开发者更高效地设计和实现复杂的软件...

    java之设计模式--各种设计模式解析

    Java设计模式是面向对象编程中的一种最佳实践,用于解决常见的软件设计问题,提高代码的可重用性、可维护性和可扩展性。本篇将详细解析几种常见的设计模式,包括单例模式、工厂模式和命令模式。 首先,我们来看工厂...

    java设计模式之三大工厂模式

    在Java编程领域,设计模式是一种解决常见问题的模板或...在阅读给定的博客文章《java设计模式之三大工厂模式》时,可以期待作者详细解析每种模式的结构、优缺点以及使用示例,帮助读者更好地理解和应用这些设计模式。

    java设计模式.docx

    在《Java设计模式》中,重点介绍了六大创建型设计模式,这些模式提供了不同的方法来封装对象实例化的过程。本篇文章将详细介绍这些模式,并通过具体的例子加以说明,帮助读者更好地理解和应用这些模式。 #### 创建...

    Java 设计模式

    Java设计模式是面向对象编程中的一个核心概念,它是一套被广泛接受并实践的解决软件设计中常见问题的经验总结。设计模式并非具体的代码或库,而是一种在特定场景下解决问题的模板,它描述了在软件设计中如何在不同...

    Java与设计模式

    Java设计模式是软件开发中的一种最佳实践,它们是解决常见问题的经验总结,旨在提高代码的可重用性、可读性和可维护性。本篇主要介绍三种创建型设计模式:工厂模式、工厂方法模式和建造者模式。 1. **工厂模式**: ...

Global site tag (gtag.js) - Google Analytics