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

    七大设计原则:

      实际开发中,并不是一定要求所有代码都强制遵循设计原则,需要考虑人力、时间、质量,要在适当的场景遵循设计原则,能够根据实际情况平衡取舍,帮助我们设计更家优雅的代码结构。

      开闭原则
      依赖倒置原则
      单一职责原则
      接口隔离原则
      迪米特法则
      里氏替换原则
      合成复用原则

    开闭原则:Open-Closed Principle, OCP

      对扩展开放、对修改关闭
      强调用抽象构建框架,用实现扩展细节

      生活案例:弹性工作时间,规定每天工作8个小时,早来早走,晚来晚走
      程序案例:
        版本更新,尽可能不修改源码,但可以增加新功能
        商超各种商品定价、优惠活动

      design.principle.openclose

    依赖倒置原则:Dependence-Inversion Principle, DIP

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

      依赖注入三种注入方式:
      传参方式、构造器方式、Setter方式(一般用于全局单例)

      切记:以抽象为基准比以细节为基准搭建起来的架构要稳定得多,因此在拿到需求之后,要面向接口编程,先顶层再细节来设计代码结构

      design.principle.dependencyinversion

    单一职责原则:Simple-Responsibility Principle, SRP

      一个ClassinterfaceMethod 只负责一项职责

      不要存在大于一个导致功能变更的原因,降低变更引起的风险

      design.principle.simpleresponsibility

    接口隔离原则:Interface-Segregation Principle, ISP

      用多个专门的接口,而不使用单一的总接口,
      【客户端不应该依赖它不需要的接口】

      一个类对一类的依赖应该建立再最小的接口之上
      建立单一的接口,不要建立庞大臃肿的接口
      尽量细化接口,接口中的方法尽量少(不是越少越好,一定要适度)

      design.principle.interfacesegregation

    迪米特法则:Law of Demeter, LOD
      最少知道原则:Least Knowledge Principle, LKP

      尽量降低类与类之间的耦合
      强调只和朋友交流,不和陌生人说话

      design.principle.demeter

    里氏替换原则:Liskov-Substitution Principle, LSP

      只存在父类与子类之间,用于约束继承泛滥

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

      子类可以实现父类的抽象方法,但不能覆盖父类的抽象方法
      子类中可以增加自己特有的方法 当子类的方法实现父类的方法时(重写/重载或实现抽象方法):
      方法的前置条件(即方法的入参)要比父类方法的入参更宽松?
      方法的后置条件(即方法的返回值)要比父类更严格或相等?

      design.principle.liskovsutiution

    合成复用原则:Composite/Aggregate Reuse Principle, CARP

      尽量使用对象组合(has-a)/ 聚合(contanis-a),而不是继承关系达到软件复用的目的

      组合/聚合 称之为黑箱复用;继承 叫做白箱复用

      design.principle.compositereuse

    总结:
      学习设计原则,千万不能形成强迫症。碰到业务复杂的场景,我们需要随机应变。

  • 相关阅读:
    BZOJ 1088 模拟(扫雷经验…)
    BZOJ 1529
    BZOJ 3224
    BZOJ 1192
    BZOJ 1012
    博客搬家说明
    BZOJ 2423 DP
    BZOJ 1789&1830 推式子 乱搞
    BZOJ 1588
    拆点:虫洞
  • 原文地址:https://www.cnblogs.com/fightingtong/p/12809224.html
Copyright © 2011-2022 走看看