设计模式之五大原则

      面向对象编程的最终目的是追求软件的可维护性、可扩展性、可复用性、灵活多样。达到这样的目的需要拥有软件系统设计的思想、原则和模式三大法宝。

      现在,我来给大家奉献一件法宝----软件系统设计的原则。

单一职责原则 (SRP,Single Responsibility Principle)

        定义:一个类应该仅有一个引起它变化的原因。换句话说,就是功能单一。

        如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。因此,遵守SRP原则可以减少类之间的耦合性,提高了可复用性。

      示例:手机有多种功能,但每一种功能又不是很好;照相机只能照相,却能照出很棒的照片。功能单一,才能做到更好!

开放-封闭原则 (OCP, Open-Close Principle)

      定义:软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改。即,对于扩展是开放的,对于更改是封闭的。

      OCP原则要求开发人员可以在不修改系统中现有功能代码的情况下,而实现对应用系统的软件功能进行扩展。此原则提高了系统的可扩展性和可维护性。

      方法:在设计方面应用抽象和封装的思想,创建抽象来隔离变化;在系统功能编程实现方面应用面向接口编程。

      示例对比简单工厂模式和工厂方法模式,简单工厂模式每增加一个具体的产品类就需要修改工厂类,不符合OCP原则;相反,工厂方法模式中增加一个具体的产品类,只需要扩展一个具体的工厂类即可,符合OCP原则。

依赖倒转原则(DIP,Dependence Inversion Principle)

     定义A、高层模块不应该依赖低层模块,两个都应该依赖抽象。B、抽象不应该依赖细节,细节应该依赖抽象。

     依赖倒转,相对于面向过程而言。面向过程创建出的依赖关系结构是,高层模块去调用低层模块、策略依赖于细节;面向对象“倒转”了面向过程的依赖关系,高层模块不再依赖低层模块,细节和策略依赖抽象。

     方法:  针对接口编程,不要对实现编程。

     示例:电脑中的主板,各部件之间互不依赖,全都依赖于主板。

设计模式之五大原则_第1张图片

里氏代换原则(LSP, Liskov Substitution)

     定义:子类型必须能够替换掉它们的父类型,并出现在父类能够出现的任何地方。

     里氏代换原则又称替换原则,子类可以替换掉父类,以父类的身份出现。只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为,提高了软件的可复用性。由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展,提高了可扩展性。

迪米特法则(也称最少知识原则,LoD

     定义:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

      在类的结构设计上,每一个类都应当尽量降低成员的访问权限。迪米特法则的根本思想是强调了类之间的松耦合。类之间的耦合越弱,越有利于复用,提高了可复用性。

    示例:

设计模式之五大原则_第2张图片

 

    小菜如果需要找人组装电脑方法,可以通过IT部转发这个调用。

最后

      开放-封闭原则是面向对象设计的核心所在。

      依赖倒转原则 是面向对象设计的标志

你可能感兴趣的:(设计模式)