面向对象的设计原则(2):OCP

太出名了,不再多谈。主要有两点
 (1) Open for extension
 (2) Closed for modification
 Robert.C.Martin举了一个Shape的例子来说明问题。关键的思想是,如果我们预测到了变化,就可以设计一个抽象来隔离它。但是无论模块是如何得"封闭",都会存在一些无法对之封闭得变化。这需要设计人员对于他设计得模块应该对那种变化封闭作出选择,他必须猜测出最有可能发生变化的种类。然后构造抽象来隔离。这种预测能力需要经验的积累!! 并且通常情况下都会猜测错误,怎么办,Martin给我们指出了一条道路:
 (1)只受一次愚弄
 我们愿意被第一颗子弹击中,然后我们会确保自己不再被同一支枪发射的任何子弹击中
 (2) 刺激变化:
 第一颗子弹来的越早、越快对我们越有利:首先编写测试,使用很短的迭代周期,尽早、经常的把软件展示给客户

 OCP是面向对象设计的核心所在,遵循这个原则可以带来巨大的好处,但是肆意的抽象同样不是一个好注意,拒绝不成熟的抽象和抽象本身一样重要!!!

你可能感兴趣的:(测试)