zoukankan      html  css  js  c++  java
  • 七大设计原则

    一、开闭原则(Open Closed Principle,OCP)

    定义

      一个软件实体如类、模块和函数应该对扩展开放对修改关闭

      模块应尽量在不修改原来代码的情况下进行扩展

      用抽象构建框架,用实现扩展细节

    优点:提高系统的可复用性和可维护性

    做法:

      1.通过接口或者抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法,也就是扩展必须添加具体实现而不是改变具体的方法

      2.参数类型、引用对象尽量使用接口或者抽象类,而不是实现类,这样就能尽量保证抽象层是稳定的

      3.一般抽象模块设计完成(例如接口的方法已经敲定),不允许修改接口或者抽象方法的定义

    代表:装饰器模式

    二、依赖倒置原则(Dependency Inversion Principle,DIP)

    定义

      高层模块不应该依赖低层模块,二者都应该依赖其抽象

      抽象不应该依赖细节,细节应该依赖抽象

      针对接口编程,不要针对实现编程

    优点:减少类间的耦合性,提高系统稳定性,降低修改程序造成的风险,提高可读性和可维护性

    做法:

      1.每个具体的类都应该有其接口或者基类,或者两者都具备

      2.类中的引用对象应该是接口或者基类

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

    定义

      指一个类或者模块应该有且只有一个引起改变的原因

      一个类、接口、方法只负责一项职责

    优点:降低类的复杂度,提高可读性和可维护性,降低变更引起的风险,使类的颗粒度更小

    代表:迭代器模式

    四、接口隔离原则(Interface Segregation Principle,ISP)

    定义

      用多个专门的接口,而不是使用一个总接口

      客户端不应该依赖它不需要的接口

    优点:降低类的复杂度,提高可读性和可维护性,降低变更引起的风险,使类的颗粒度更小

    做法

      尽量细化接口,减少接口中的方法

      一个类对另一个类的依赖应该建立在最小的接口上

      使用接口隔离原则前,先满足单一职责原则

      要注意适度

    五、迪米特法则(Law of Demeter,LOD)

    定义

      也叫最小知道原则(Least Knowledge Principle,LKP)

      一个对象应该对其他对象保持最少的了解

      强调尽量只与直接的朋友通讯,一个对象的"朋友"包括他本身(this)、它持有的成员对象、入参对象、它所创建的对象

    优点:降低类间的耦合

    做法尽量减少对象之间的交互

    六、里氏替换原则(Liskov Substitution Principle,LSP)

    定义

      所有引用基类的地方必须能透明地使用其子类的对象,也可以简单理解为任何基类可以出现的地方,子类一定可以出现

      子类可以扩展父类的功能,但不能改变父类原有的功能

    优点:防止继承泛滥,提高代码的健壮性、兼容性、扩展性,降低变更的风险

    做法

      子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法

      子类可以扩展增加自己独有的方法

      子类覆盖父类的方法时,入参应该相等或更宽松,确保父类能接收的参数,子类都能接收,而出参应该相等或更严谨

    七、合成复用原则(Composite/Aggregate Reuse Principle,CARP)

    定义

      尽量使用对象组合/聚合,而不是通过继承达到复用的目的

      聚合: has-a,两者生命周期相互独立

      组合: contains-a,两者生命周期相同

    优点:降低类与类之间的耦合,更加灵活

    参考:https://www.jianshu.com/p/3a0e9fba3a41

     
  • 相关阅读:
    Metro-UI系统-1-tile标签
    linux 修改文件最大数
    linux 利用cat写入一段文件
    linux for 循环的小应用
    办公区公网Ip访问不到阿里云ECS
    Django 构建一个项目
    Django 基础篇
    iptables 生产环境下基础设置
    centos7 部署LNMP
    查看sqlserver被锁的表以及如何解锁
  • 原文地址:https://www.cnblogs.com/silence-maple/p/15130700.html
Copyright © 2011-2022 走看看