ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 网络编程 >> 移动开发 >> Java设计模式中软件的设计原则篇

Java设计模式中软件的设计原则篇(1/2)

来源:网络整理     时间:2018-10-31     关键词:

本篇文章主要介绍了" Java设计模式中软件的设计原则篇",主要涉及到方面的内容,对于移动开发感兴趣的同学可以参考一下: 一、单一职责原则(Single Responsibility Principle--SRP)就一个类而言,应该仅有一个引起它变化的原因。如果一个类的职责太多,就...

一、单一职责原则(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)

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

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

第二种就是通过继承。

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

相关图片

相关文章