Java程序10个面向对象设计原则

1.不写重复代码,而是抽象成可复用的代码块。
如果您有两处以上相同的代码块,请把它们抽象成一个单独的方法;或者您多次使用了硬编码的值,请把它们设置成公共常量。
这种面向对象设计原则的优点是易于维护。重要的是不要滥用此原则,重复不是针对代码而是针对功能来说。它的意思是,如果您使用通用代码来验证OrderID和SSN,这并不意味着它们是相同的或者他们今后将保持不变。通过把通用代码用于实现两种不同的功能,或者您把这两种不同的功能密切地联系在一起;当您的OrderID格式改变时,您的SSN验证代码将会中断。所以要当心这种耦合,而且不要把彼此之间没有任何关系却类似的代码组合在一起。


2.封装经常修改的代码 在软件领域永远不变的是“变化”,所以把您认为或怀疑将来要被修改的代码封装起来。
优点是:易于测试和维护恰当封装的代码。如果您在用Java编程,那么请遵守以下原则:变量和方法的访问权限默认设置为私有,并且逐步放开它们的访问权限,例如从“private”到“protected ”、“not public”。Java中的一些设计模式使用了封装,工厂设计模式就是一个例子,它封装了创建对象的代码而且提供了以下灵活性:后续生成新对象不影响现有的代码。


3.打开/关闭设计原则 类、方法/函数应当是对扩展(新功能)开放,对修改闭合。这是另外一个优雅的SOLID 设计原则,以防止有人修改通过测试的代码。理想情况下假如您添加了新功能,那么您的代码要经过测试,这就是打开/关闭设计原则的目标。顺便说一句,SOLID中的字母“O”指的是打开/关闭设计原则。


4.单一职责原则 单一职责原则是另外一个SOLID设计原则,SOLID中的字母“S”指的就是它。按照SRP,一个类修改的原因应当有且只有一个,或者一个类应当总是实现单一功能。如果您在Java中的一个类实现了多个功能,那么这些功能之间便产生了耦合关系;如果您修改其中的一个功能,您有可能就打破了这种耦合关系,那么就要进行另一轮测试以避免产生新的问题。


5.依赖注入/反转原则 不要问框架的依赖注入功能将会给你带来什么益处,依赖注入功能在spring框架里已经很好的得到了实现,这一设计原则的优雅之处在于:DI框架注入的任何一个类都易于用模拟对象进行测试,并且更易于维护,因为创建对象的代码在框架里是集中的而且和客户端代码是隔离的。java注重的是实战项目,你是真心地想学好java这门技术可以来这里,前面是四九一,中间是八九七,最后是一五八,每天都会有JAVA直播的视频教学,不想的就不要来。有多种方法可以实现依赖注入,例如使用字节码工具,其中一些AOP(面向切面编程)框架如切入点表达式或者spring里使用的代理。想对这种SOLID设计原则了解更多,请看IOC 和 DI设计模式中的例子。 SOLID中的字母“D”指的就是这种设计原则。


6.优先使用组合而非继承 如果可以的话,要优先使用组合而非继承。你们中的一些人可能为此争论,但我发现组合比继承更有灵活性。组合允许在运行时通过设置属性修改一个类的行为,通过使用多态即以接口的形式实现类之间的组合关系,并且为修改组合关系提供了灵活性。甚至 Effective Java也建议优先使用组合而非继承。


7.里氏替换原则 根据里氏替换原则,父类出现的地方可以用子类来替换,例如父类的方法或函数被子类对象替换应该没有任何问题。LSP和单一职责原则、接口隔离原则密切相关。如果一个父类的功能比其子类还要多,那么它可能不支持这一功能,而且也违反了LSP设计原则。为了遵循 LSP SOLID设计原则,派生类或子类(相对父类比较)必须增强功能,而非减少。SOLID中的字母“L”指的就是 LSP设计原则。


8.接口隔离原则 接口隔离原则指,如果不需要一个接口的功能,那么就不要实现此接口。这大多在以下情况发生:一个接口包含多种功能,而实现类只需要其中一种功能。接口设计是一种棘手的工作,因为一旦发布了接口,您就不能修改它否则会影响实现该接口的类。在Java中这种设计原则的另一个好处是:接口有一个特点,任何类使用它之前都要实现该接口所有的方法,所以使用功能单一的接口意味着实现更少的方法。


9.编程以接口(而非实现对象)为中心 编程总是以接口(而非实现对象)为中心,这会使代码的结构灵活,而且任何一个新的接口实现对象都能兼容现有代码结构。所以在Java中,变量、方法返回值、方法参数的数据类型请使用接口。这是许多Java程序员的建议, Effective Java 以及 head first design pattern 等书也这样建议。


10.代理原则 不要期望一个类完成所有的功能,可以适当地把一些功能交给代理类实现。代理原则的典范是:Java 中的equals() 和 hashCode() 方法。为了比较两个对象的内容是否相同,我们让用于比较的类本身完成对比工作而非它们的调用方。这种设计原则的好处是:没有重复编码而且很容易修改类的行为。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UML类图 UML(Unified Modeling Language),即统一建模语言,是图标式软件设计语言。 类图(Class diagram)是最常用的UML图,显示类、接口以及它们之间的静态结构和关系,用于描述系统的结构化设计。类图最基本的元素是类或者接口。 第1页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第1页。 类的UML图 UML类图显示类的三个组成部分,第一是Java中定义的类名,第二个是该类的属性,第三个是该类提供的方法。 第一层为类的名称,第二层是类的属性,第三层表示的是类的方法或称为操作。 一个类图的类名是必须的 第2页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第2页。 类的UML图 注意:属性和方法之前附加的可见性修饰符, "+"表示public,"-"表示private,"#"表示protected。省略这些修饰符表示具有package(包)级别的可见性。冒号后边表示数据的类型或方法的返回值类型。 如果是抽象类,类名以斜体表示。 第3页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第3页。 UML类图及关系 第4页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第4页。 接口的UML表示 第5页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第5页。 依赖关系:虚线+箭头 第6页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第6页。 关联关系:空心的菱形+实线箭头 第7页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第7页。 组合关系:实心的菱形+实线箭头 第8页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第8页。 实线+空心的三角形,起始端是子类,空心三角形指向终点端的父类。 泛化关系: 第9页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第9页。 实现关系 实现关系的UML表示法:虚线+空心三角形。 第10页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第10页。 发现变化,并封装变化 在软件设计之初,需要发现所要开发软件中可能存在或已经存在的"变化",然后利用抽象的方式对这些变化进行封装。抽象是没有具体的代码实现,抽象代表了一种可扩展 。 参阅教材例9.1 第11页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第11页。 单一职责原则和最少知识原则 在单一职责(Single Responsibility Principle, 简称为SRP)中,就一个类而言,应该仅有一个引起它变化的原因。也就是说,不要把变化原因各不相同的职责放在一起。 第12页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第12页。 单一职责原则和最少知识原则 最少知识原则(Least Knowledge Principle, 简称为LKP)又叫迪米特法则(Law of Demeter,简写为LoD),就是说一个对象应当对其他对象有尽可能少的了解。就像我国古代老子所说的"使民无知"和"小国寡民"的统治之术,"是以圣人之治,虚其心,实其腹,弱其志,常使民无知无欲。"以及 "小国寡民……邻国相望,鸡犬之声相闻,民至老死,不相往来"。 第13页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第13页。 开放-封闭原则 所谓"开放-封闭原则"(Open-Closed Principle),也称"开-闭原则",就是让设计对扩展开放,对修改关闭。也就是说,不允许更改的是系统的抽象层,而允许更改的是系统的实现层。高层模块不应该依赖低层模块,抽象不应该依赖细节,使系统设计更为通用、更为稳定。面向抽象编程,这里的抽象主要指的是抽象类或接口。 第14页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第14页。 开放-封闭原则 "开放-封闭原则"实质上是指当一个设计中增加新的模块时,不需要修改现有模块。 第15页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第15页。 子类型能够替换基类型原则 子类型能够替换基类型原则也叫里氏代换原则(Liskov Substitution Principle ,简称LSP),里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现,且程序运行正常。 特

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值