六大设计原则之开闭原则

定义:一个软件实体。如类/模块/函都应该对扩展开放,对修改关闭。

问题由来:在软件的生命周期内,因为变化,升级和维护等原因需要对软件原有代码进行修改,可能会给旧代码引入错误,也有可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。

解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现。

  开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定灵活的系统,开闭原则只定义了对修改关闭,对扩展开放。其实只要遵循前面5中设计模式,设计出来的软件就是符合开闭原则的。

  用抽象构建架构,用实现扩展细节。因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保证架构的稳定。而软件中易变的细节,我们用从抽象派生的实现类来进行扩展,当软件需要发生变化时,我们只需要根据需求重新派生一个实现类来扩展就可以了,当然前提是抽象要合理,要对需求的变更有前瞻性和预见性。

  • 单一职责原则告诉我们实现类要职责单一;
  • 里氏替换原则告诉我们不要破坏继承关系;
  • 依赖倒置原则告诉我们要面向接口编程;
  • 接口隔离原则告诉我们在设计接口的时候要精简单一;
  • 迪米特法则告诉我们要降低耦合
  • 开闭原则告诉我们要对扩展开发,对修改关闭;

那么如何去遵守这六个原则,对这六个原则的遵守并不是是和否的问题,而是多和少的问题,也就是说,我们一般不会说有没有遵守,而是说遵守程度达到多少,任何事过犹不及,设计模式六个设计原则也是一样,制定这六个原则并不是一味的要求我们去遵守他们,而是根据实际情况灵活运用,

图中的每一条维度代表一项原则,我们依据对这个遵守程度在维度上画一个点,则如果对这项原则遵守的合理的话,这个点会落在红色的圈中,如果遵守的差会落在小圆圈里,遵守的差会落在大圆圈外面,一个良好的设计体现在图中,应该是六个点都在同心圆中的六边形。

如上图,设计1和设计2属于良好设计,他们对六项原则遵守程度都在合理范围内,设计3和设计4虽然有些不足,但也基本可以接受,设计5和设计6,一个几乎不遵守,一个遵守过度,那么这两种设计模式都是迫切需要重构的。

 转载:http://blog.csdn.net/zhengzhb/article/details/7296944

原文地址:https://www.cnblogs.com/gudulijia/p/6481784.html