`
fanger0914
  • 浏览: 1215 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java 中的设计思想

阅读更多
① 单一职责原则SRP(Single Responsibility Principle)

所谓“单一职责”原则,就是,一个类应该仅有一个引起它变化的原因。多个职责,就是一个类有多个引起它变化的原因。

如果一个类有多个职责,会造成职责的相互影响,可能一个职责的变化,会影响到其他职责的的实现,甚至引起其他职责跟着变化,这种设计是很脆弱的。因为这样把多个职责耦合在一起了。

这个原则看起来简单,好理解,但是实际上很难完全做到,难点在于如何区分“职责”。这是个没有标准量化的东西,哪些算职责、到底这个职责有多大的粒度,如何细化等。因此,在实际开发中,这个原则也是最容易违反的。

② 开放-关闭原则OCP(Open-Closed Principle)

所谓“开放-关闭”原则,是指:一个类应该对扩展开放,对修改关闭。即:类的行为是可以扩展的,而且是在不修改已有代码的情况下进行扩展。开闭原则是设计中非常核心的一个原则。

实现开闭原则的关键在于合理地抽象、分离出变化与不变化的部分,为变化的部分预留下可扩展的方式,比如,钩子方法或是动态组合对象等。

这个原则看起来简单,但实际上一个系统要做到完全遵守开闭原则,几乎是不可能的,也没有这个必要。适度的抽象可以提高系统的灵活性,使其可扩展、可维护。如果过度地抽象会增加系统的复杂程度。应该在需要改变的地方应用开闭原则,而不用到处使用,从而陷入过度设计。

③ 里氏替换原则LSP(Liskov Substitution Principle)

所谓“里氏替换”原则,指的是,子类型必须能够替换掉它们的父类型。这是一种多态的使用情况,它可以避免在多态的应用中,出现某些隐蔽的错误。

事实上,当一个类继承了另外一个类,那么子类就拥有了父类中可以继承下来的属性和操作。理论上说,此时使用子类型去替换掉父类型,应该不会引起原来使用父类型的程序出现错误。

但是,很不幸的是,在某些情况下会出现问题。比如,如果子类型覆盖了父类类型中的某些方法,或者子类型修改了父类型的某些属性的值,那么原来使用父类型的程序就有可能出现错误,因为在运行期间,从表面上看,它调用的是父类型的方法,需要的是父类型方法实现的功能,但是实际运行调用的却是子类型覆盖实现的方法,而该方法与父类型的方法并不一样,于是导致错误的产生。

从另外一个角度来说,里氏替换原则是实现开闭的主要原则之一。开闭原则要求对扩展开放,扩展的一个实现手段就是使用继承;而里氏替换原则是保证子类型能够正确替换父类型,只有正确替换,才能实现扩展,否则扩展了也会出现错误。(如果程序中调用了父类型中的某些方法,而子类型覆盖了父类型的这些方法,那么这时程序中子类型就不能替换父类型。)

④ 依赖倒置原则DIP(Dependence Inversion Principle)

所谓“依赖倒置”原则,是指,依赖与抽象,不依赖于具体类。要做到依赖倒置,典型的应该做到:

       ■ 高层模块不应该依赖于底层模块,二者都应该依赖于抽象。

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


很多人觉得,层次化调用的时候,应该是高层调用“底层所拥有的接口”,这是一种典型的误解。事实上,一般高层模块包含对业务功能的处理和业务策略的选择,应该被重用,是高层模块去影响底层的具体实现。

底层接口应该是高层提出的,而由底层实现。即底层接口的所有权在高层模块,这是一种所有权的倒置。这是著名的Hollyword 原则:Don't call us,We'll call you!

⑤ 接口隔离原则 ISP (Interface Segregation Principle)

所谓“接口隔离”原则,是指,不应该强迫客户依赖与他们不用的方法。

这个原则用来处理那些比较“庞大”的接口,这种接口通常会有较多的操作声明,涉及到很多职责。客户在使用这些接口的时候,通常会有很多他不需要的方法,这些方法对于客户来讲,就是一种“接口污染”,相当于强迫用户在一大堆“垃圾方法”中去寻找他需要的方法。因此,这样的接口应该被隔离,应该按照不同的客户需求来分离成针对客户的接口。这样的接口中,只包含客户需要的操作声明,这样即方便了客户的使用,也可以避免无用接口而导致的错误。

分离接口的方式,除了直接进行代码分离之外,还可以使用代理来分离接口,在能够支持多重继承的语言中,开可以采用多重继承的方式进行分离。

⑥ 最少知识原则 LKP(Least Knowledge Principle)

所谓“最少知识”原则,是指,只和你的朋友谈话。

这个原则用来指导我们在设计系统的时候,应该尽量减少对象之间的交互,对象只和自己的朋友交互,从而松散对象之间的耦合。通过松散对象之间的耦合,来降低对象之间的依赖,这样在修改系统的某一个部分的时候,就不会影响到其他的部分,从而使系统有更好的可维护型性。

什么样的对象才能当做“朋友”呢?

● 当前对象本身。

● 通过方法的参数传进来的对象。

● 当前对象所创建的对象。

● 当前对象的实例变量所引用的对象。

● 方法内所创建或实例化的对象。

⑦ 其他原则

◆ 面向接口编程。

◆ 优先使用组合(聚合),而非继承。

◆ 一个类需要的数据应该隐藏在类得内部。

◆ 类之间应该零耦合,或只是传导耦合,即:对象之间要么没有关系,要么只使用另一个对象的接口提供的操作。

◆ 在水平方向上尽可能分布系统功能。
分享到:
评论

相关推荐

    java 程序设计思想

    Java程序设计思想是编程领域的核心概念,它不仅仅是关于语法和函数调用,更是关于如何构建高效、可维护、可扩展的软件系统。本书的核心目的是帮助新手程序员理解和掌握这些设计原则和最佳实践,从而提升他们的编程...

    java程序设计课程设计

    在这个过程中,学生不仅需要掌握Java的编程语法,还需要了解如何进行程序的编写、调试以及应用。课程设计的题目是“聊天工具程序设计”,其目的不仅在于锻炼学生的编程技能,还在于提升他们的程序设计素养和严谨的...

    记事本设计 JAVA程序设计

    在Java中,记事本的设计通常涉及到GUI(图形用户界面)的创建,使得用户可以编辑文本,改变字体样式等。 【描述】提到"本程序是一个记事本,系统的将字体等功能常用功能与记事本功能结合在一起",这表明这个程序不仅...

    Java程序设计精讲课件

    在Java程序设计中,泛型和集合类是两个非常重要的主题。泛型提供了一种类型安全的方式,使得集合可以存储特定类型的元素,避免了强制类型转换的麻烦,同时提高了代码的可读性和可维护性。集合类如ArrayList、...

    Java程序设计PPT详解

    《Java程序设计》通过对Java编程语言的全面介绍,引导读者快速地掌握Java编程语言的核心内容并学会灵活运用所学的语言知识及面向对象的编程思想。《Java程序设计》共分12章,内容包括Java语言概述、面向对象编程初步...

    Java五子棋设计报告.doc

    【Java五子棋游戏设计与实现】 五子棋游戏,源于中国古代,历史悠久,深受各年龄段玩家喜爱。在当今计算机普及的时代,将这种经典棋类游戏搬到电脑屏幕上,既能满足人们的娱乐需求,又能锻炼思维能力。本项目是晓庄...

    Java课程设计(简易聊天室)

    在Java编程领域,课程设计是学习过程中不可或缺的一部分,它旨在让学生将所学理论知识应用于实际项目中。本项目“Java课程设计(简易聊天室)”就是一个很好的实践案例,它涵盖了网络编程、多线程以及用户交互等核心...

    java课程设计 中国象棋

    在本Java课程设计中,我们将深入探讨如何利用Java编程语言实现一个中国象棋游戏。这个项目不仅涵盖了基础的编程概念,还涉及到了网络编程和图形用户界面(GUI)的设计,使其成为一个综合性的学习实践。 首先,我们...

    雍俊海 Java程序设计教程 课后答案

    Java程序设计是软件开发的基础,尤其对于初学者来说,掌握好Java语言的语法和编程思想至关重要。雍俊海的《Java程序设计教程》是一本深受读者欢迎的教材,其第二版更加深入浅出地讲解了Java的核心概念和技术。课后...

    Java 蜘蛛牌游戏 Java 课程设计 Java毕业设计 课程设计

    同时,游戏的逻辑处理和交互设计也体现了面向对象编程的思想,如类的设计、对象的创建与交互、封装、继承和多态性等。 【图形用户界面(GUI)】 鉴于描述中提到可以直接运行,我们可以推测游戏可能采用了Java的...

    JAVA课程设计_设计报告_图书管理系统

    3.1 设计思想 系统设计遵循模块化原则,将功能划分为用户模块、图书模块、管理员模块等,每个模块独立完成特定任务,便于后期的维护和扩展。 3.2 系统功能结构图 功能结构图清晰地展示了各个模块间的关联,如用户...

    Java面向对象程序设计

    Java面向对象程序设计是计算机编程领域中的核心主题,它基于面向对象编程(OOP)理念,使得代码更具有模块化、可复用性和易于维护的特点。以下是对标题和描述中涉及的知识点的详细阐述: 1. **第1章:Java入门** -...

    java课程设计五子棋游戏.doc

    "java课程设计五子棋游戏" 该课程设计主要是基于Java语言,通过...通过这个课程设计,学生可以掌握Java语言的编辑基本功,拓宽常用类库的应用,并且锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力。

    实战Java高并发程序设计 中文pdf版下载

    实战Java高并发程序设计主要介绍基于Java的并行程序设计基础、思路、方法和实战。首先,立足于并发程序基础,详细介绍Java中进行并行程序设计的基本方法。第二,进一步详细介绍JDK中对并行程序的强大支持,帮助读者...

    Java课程设计报告(日历记事本)

    - Java编程思想:这本书深入浅出地介绍了面向对象的编程思想,对于理解类的设计和实现有很大帮助。 - Stack Overflow:这个社区平台提供了大量的编程问题解决方案,对于解决开发过程中遇到的具体问题很有帮助。 - ...

    java课程设计报告之万年历程序设计报告

    - 程序设计思路:采用面向对象的设计思想,将每个部分抽象为独立的类,如Year、Month、Day等。 - 程序运行界面:设计一个窗口,包括输入框、按钮和显示区域,按钮用于切换年月,显示区域展示日历。 - 流程图:...

    java课程设计:日历记事本

    通过该题目的设计,培养学生面向对象程序设计的思想,要求学生达到熟练掌握Java语言的基本知识和技能,基本掌握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。...

    最近课程设计——JAVA连连看

    好东西大家分享——JAVA连连看JAVA连连看JAVA连连看JAVA连连看JAVA连连看JAVA连连看JAVA连连看JAVA连连看JAVA连连看JAVA连连看JAVA连连看JAVA连连看JAVA连连看JAVA连连看JAVA连连看JAVA连连看JAVA连连看JAVA连连看

    JAVA课程设计 实验 学习方法

    最后,记得将你的代码整理成文档,解释设计思路、实现过程和可能的优化方案,这对提升自身的表达能力和逻辑思维能力大有裨益。 在这个过程中,可以参考Java官方文档、在线教程和开源项目,积极参与讨论,与其他学习...

Global site tag (gtag.js) - Google Analytics