一:Java與模式

不变@变---软件设计的永恒之道
静@动----UML建模
可维护性&可复用性&独立

软件设计原则(善为士者不武:一个好的软件设计师在其设计的软件投入使用之后很少作大规模的修改):
(1)"开-闭"原则(Open-Closed Principle)
对扩展开放,对修改关闭:即在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。 (用面向对象的语言来讲,不允许更改的是系统的抽象层,而允许扩展的是系统的实现层,所以,这一原则主要体现在系统接口和抽象类的设计,这个抽象层预见了所有的可能扩展,因此,在任何扩展下都不会改变,因此在任何扩展的情况下都不会改变,这使得系统的抽象层不需要修改,从而做到了对修改关闭;同时,由于抽象层导出的一个或多个新的具体类可以改变系统的行为,因些系统的设计对扩展是开放的)

要百分百做到"开-闭"原则是不可能的,以下的原则是"开-闭"原则的手段和工具,是附属于"开-闭"原则的:
(2)里氏代换原则(Liskov Substitution Principle)
这一原则说,任何基类可以出现的地方,子类一定可以出现,这一原则是对实现抽象化的具体步骤的规范。
(3)依赖倒转原则(Dependency Inversion Principle)
这个原则说的是要依赖于抽象,不要依赖于实现
(4)接口隔离原则(Interface Segregation Principle)
这个原则讲的是应当为客户端提供尽可能小的单独接口,以限制软件实体间通信的宽度。
(5)合成/聚合复用原则(Composition/Aggregation Principle)
这个原则讲的是要尽量使用合成/聚合,而不是用继承关系达到复用的目的.这个按我的理解就是:比如说有父子两个类都在用到一个方法,我们可以把这个方法封装到另一个类C里面,在父子类里拥有C的引用以达到复用.
(6)迪米特法则(Law of Demeter--LoD)
这个法则讲的是软件实体之间应该尽可能少地发生相互作用,以限制实体间通信的宽度和深度

Java中的模式
(1)策略模式
策略模式讲的是,如果有一组算法,那么就把每一个算法封装到一个类里,再让这些类继承一个抽象类,使得这些类可以互换.
(2)简单工厂模式

对重构的讨论:
如果一个条件转移语句没有涉及到重要的商务逻辑,或者不会随时间的变化而变化,这时候将条件转移语句改写成为多态性就是一种没有意义的浪费.

java.util.Calendar并不能容纳中国阴历,所以它并不符合"开-闭"原则

你可能感兴趣的:(java,设计模式,c,算法,UML)