OO的设计原则

今天同事和我们一起讨论分享了OO的设计原则,讨论使人明晰,有人一起讨论学习是一件幸福的事情。

1.开闭原则

对功能的扩展是开放的,对修改是闭合的。

可以应用于类的设计,框架的设计等。

为什么?开闭原则有利于保护已有的客户端代码,让原有的代码不会因为框架的扩展修改而发生变动,减少维护的成本。

如果你设计的框架经常变动,而且每次变动使使用的人要改很多,那么没人敢用了。

2.单一职责原则

应用于实现类,如果类有变化,那么引起变化的原因仅有一个

为什么?如果你在设计类的时候,没有进行接口拆分设计,直接封装类的属性和接口,也无可厚非。

但如果你对属类归类,对行为划分归类,可以减少某些方法改变引起整个类改变的风险。提高可维护性。

但这样往往增加了设计的复杂性,在实际应用中常常很难做到。

例如一个user类,拆分成两个接口,一个是user的属性信息(类或接口),一个是user的方法信息(接口)

 

3 里氏替换原则

所有使用基类的地方都可以透明地使用子类进行替换。

子类可以扩展父类的功能,但不能改变父类原有的功能。

  • 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
  • 子类中可以增加自己特有的方法。
  • 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
  • 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

如果违反,可能会无意中使代码犯错。

4.依赖倒置原则

类的属性设计,成员变量不使用具体的类,而使用接口。

类方法的设计,方法参数使用接口或基类,不使用实现类。

这样面向抽象进行设计,减少了耦合性。

这里的依赖倒置原则,不是依赖注入(IOC)。

依赖注入是提供一种方法获取类所依赖的属性对象。譬如通过setter方法,通过构造器方法等。

把依赖注入到类中。这在spring中广泛使用。

总之,OO就是面向抽象编程(接口或抽象性),减少了类之间的耦合度。提高了复用性和可维护性。

posted on 2015-06-06 07:04  tneduts  阅读(189)  评论(0编辑  收藏  举报

导航