对于一个成功的JAVA EE项目, 好的变成习惯和合理的OO设计是坚实的基础。 如果我们想避免臃肿劣质的代码,就得遵循良好的OO设计原则, 在此结合初级部分马老师讲过的设计原则总结一下。
1、 开闭原则
一个软件模块(类、函数、代码块等)在扩展性方面应该是开放的, 而在更改性方面应该是封闭的, 这就是开闭原则。要实现该原则,在进行面向对象设计师就要尽量考虑接口封装机制、抽象机制和多态技术。 这里的关键是将这个软件模块的功能部分和不同的实现细节清晰地分离开来。
例子如在数据库访问对象, 在数据库编程的事后会碰到使用不同数据库的情况, 代码略去... ...
2、 接口分离原则
采用多个与特定客户类有关的接口比采用涵盖多个客户业务方法单一接口要好,根绝客户不同的要求,定义并提供不同的服务
3、 替换原则
在调用父类的事后应该使用子类来代替, 这其实就是“is a ”关系。 ^_^ ^_^ 比如吉他有芬达、伊斑娜、吉普森; 我们可以说芬达是电吉他但是反之则不行。
运用替换原则时, 应根据事物的内在联系, 尽量把父类设计成抽象类或接口, 如我们经常使用的List list = new ArrayList()就是这一原则的体现。
4、 合成/聚合复用原则
在实现代码重用时, 首先应该考虑类的合成/聚合, 而不是类的集成。 关于这一原则我曾看到多位大师强调过, 虽然继承是OO的基本功能, 但是不能滥用, 继承主要存在以下的一些问题:
a、 类继承性是严格的, 如果父类的实现发生改变, 那么子类的实现也得发生变化
b、 类继承破坏类封装性, 子类和父类关联在一起
c、 不合理的继承带来混乱的语义
其实, 继承只有符合“is a ”语义, 子类确实是父类的“儿子”时才是合适的, 如果是扩展关系则不适合了....
5、 依赖倒置原则
高层模块不应该依赖底层模块, 二者都应该依赖于抽象。 抽象不该依赖于细节, 而是倒过来, 细节应该依赖于抽象。
其实, 面向对象方法的出现很大程度上解决了结构化设计中高层模块过渡依赖底层模块的问题, 其利用的方法就是: 利用接口(或或抽象类)来实现松耦合, 具体实现类依赖于抽象和接口, 要针对接口编程而不是针对实现编程。