设计模式之单一职责、开放-封闭、依赖倒转

  

  单一职责:就一个类而言,只有一个引起它发生变化的原因。可以简单的理解为“单一功能”吧。

       拿手机来说,尽管手机的额功能比较强大,但是除了打电话是它比较独有的功能外,像其他功能:拍照、摄像等等,肯定没有专门的照相机,DVD的功能更高效。

       那么类也是一样的道理,如果一个类中,执行的行为比较多的话,这些行为的耦合度就较高,一旦其中某个功能要发生变化,,就可能会抑制该类中其他功能的实现

     所以,我们在编程时,一定要多思考类的职责的分类,尽量做到“单一职责”,使代码可以达到“可维护”、“可复用”、“可扩展”、“灵活性”

 

  开放-封闭:拿“一国两制”来说,不变的是两个国家的制度,不过在中国的制度上进行了扩展,这样,在香港和澳门的回归上,才变得相对容易些。

       当我们做需求时,也应该遵循该原则。毕竟对于一个需求的变更,在开发软件的过程中是一件“家常便饭”。

         简而言之,即:对于“扩展”时开放的,对于“修改”时封闭的。但是想要做到完全的“封闭”,是一件不太可能的事情。因为,或多或少的总汇忽略一些变化,不然你就可以预测未来了。

       那么我们该如何做到:对于在程序开发中可能经常处于频繁变化的代码,我们应该将其做出抽喜爱。但是,我们应注意:对于应用程序中的每一个部分都做成抽象的话,也不是一件好事情。

      谨记:拒绝不成熟的抽象与抽象本身同等重要。个人认为,如果每一部分都可以抽象的话,可能会使的代码整体看起来有点“臃肿”的感觉。

 

  依赖倒转:书中的例子是:电脑出现蓝屏,更换内存。

      确实是,因为电脑的主机上面的零件比较松散,也就是“耦合度”较低。如果收音机出现了问题的话,可能就只能找专业人员去修复了,尽管收音机比电脑更轻巧一些。

      A:高层模块不应该依赖于底层模块,而都应该依赖于抽象。(就比如CPU,全世界的厂商也就那几家,里面的复杂构造以及原理无需知道,我们的主板只需要提供按几个触点式的借口就可以)

      B:抽象不应该依赖细节,细节应该依赖于抽象

      依赖倒转可以说是面向对象的设计标志,用哪种语言编程无关紧要,如果编写时考虑的是如何针对抽象编程而不是针对细节编程,即程序中所有的编程都终止于抽象或者接口,那就是面向对象设计,否则则是面向过程设计。

    从该原则中,我们可以看出:涉及最多的也就是“继承性”、“多态性”。所以,“依赖倒转”,我个人认为:父类与子类之间的关系,但是子类必须能够完全替换父类,去实现系统本有的父类的功能

posted @ 2017-08-16 17:31  charging_for_myself  阅读(129)  评论(0编辑  收藏  举报