面向对象设计之代码复用

来源:互联网 发布:网络机顶盒 五星体育 编辑:程序博客网 时间:2024/05/03 02:58
1.对接口编程
“对接口编程”是面向对象设计的第一个基本原则,对于所有完成相同功能的组件都实现该接口,或者从该抽象类继承。
2.对象组合
"优先使用对象组合,而不是类继承"是面向对象设计的第二个原则
Bridge、Composite、Decorator、Observer、Strategy
3.将可变的部分和不可变的部分分离"是面向对象设计的第三个原则
4.每个对象完成尽量少(而且简单)的功能",也是OO的一个基本原则

5.尽量减少对变量的直接访问

对数据的封装原则应该规范化,不要把一个类的属性暴露给其它类,而是应该通过访问方法去保护他们,这有利于避免产生波纹效应。如果某个属性的名字改变,你只需要修改它的访问方法,而不是修改所有相关的代码。

6.减少方法的长度

通常,我们的方法应该只有尽量少的几行,太长的方法会难以理解,而且,如果方法太长,则应该重新设计。对此,可以总结为以下原则:

  • 三十秒原则: 
    如果另一个程序员无法在三十秒之内了解你的函数做了什么(What),如何做(How)以及为什么要这样做(Why),那就说明你的代码是难以维护的,必须得到提高;
  • 一屏原则: 
    如果一个函数的代码长度超过一个屏幕,那么或许这个函数太长了,应该拆分成更小的子函数;
  • 一行代码尽量简短,并且保证一行代码只做一件事

那种看似技巧性的冗长代码只会增加代码维护的难度。

7.子类应该特性化,完成特殊功能

如果一个子类只是使一个组件变成组件管理器,而不是实现接口功能,或者,重载某个功能,那么,就应该使用一个外部的容器类,而不是创建一个子类。

8.拆分过大的类

如果一个类有太多的方法(超过50个),那么它可能要做的工作太多,我们应该试着将它的功能拆分到不同的类中,类似于规则四。

9.作用截然不同的对象应该拆分

在构建的过程中,你有时会遇到这样的问题:对同样的数据,有不同的视图。某些属性描述的是数据结构怎样生成,而某些属性描述的是数据结构本身。最好将这两个视图拆分到不同的类中,从类名上就可以区分出不同视图的作用。

类的域、方法也应该有同样的考虑!

10.尽量减少对参数的隐含传递

两个方法处理类内部同一个数据(域),并不意味着它们就是对该数据(域)做处理。许多时候,该数据(域)应该作为方法的参输入数,而不是直接存取,在工具类的设计中尤其应该注意

原创粉丝点击