zqurgy

导航

设计原则

设计模式

  • 设计模式是指在软件开发中,经过验证的,⽤于解决在特定环境下,重复出现的,特定问题的解决⽅案;

内存模型

  • 继承Base,和成员变量为Base类型的内存模型

  • 成员变量为Base指针的内存模型-》实际开发常用这种

    • 由于该形式以Base指针的形式存储,展现一种多态的思想

    • 而上一种中Base类型和Subject呈现一种强依赖的关系

  • 父类存在虚函数,子类继承重写虚函数

    • 扩展:c语⾔当中的多态-》通过函数指针
      • redis
      • nginx

模式设计原则

  • 掌握设计原则,而不是设计模式-》设计模式的使用条件有些时候太苛刻

  • 八个原则

    • 原则1:依赖倒置原则 -》变化点必须依赖稳定点

      • ⾼层模块不应该依赖低层模块,⼆者都应该依赖抽象;

      • 抽象不应该依赖具体实现,具体实现应该依赖于抽象;

      • ⾃动驾驶系统公司是⾼层,汽⻋⽣产⼚商为低层,它们不应该互相依赖,⼀⽅变动另⼀⽅也会跟着变动;⽽应该抽象⼀个⾃动驾驶⾏业标准,⾼层和低层都依赖它;这样以来就解耦了两⽅的变动;⾃动驾驶系统、汽⻋⽣产⼚商都是具体实现,它们应该都依赖⾃动驾驶⾏业标准(抽
        象);

    • 原则2:开放封闭原则

      • ⼀个类应该对扩展开放,对修改关闭;
        • 扩展:继承-》virtual多态、组合(成员变量指针)-》组合抽象基类;
    • 原则3:⾯向接⼝编程

      • 不将变量类型声明为某个特定的具体类,⽽是声明为某个接⼝。
      • 客户程序⽆需获知对象的具体类型,只需要知道对象所具有的接⼝。
      • 减少系统中各部分的依赖关系,从⽽实现“⾼内聚、松耦合”的类型设计⽅案。
    • 原则4:封装变化点 -》关键

      • 将稳定点和变化点分离,扩展修改变化点;让稳定点变化点的实现层次分离;
    • 原则5:单⼀职责原则

      • ⼀个类应该仅有⼀个引起它变化的原因 -》只有一个功能;
    • 原则6:⾥⽒替换原则

      • ⼦类型必须能够替换掉它的⽗类型;主要出现在⼦类覆盖⽗类实现,原来使⽤⽗类型的程序可能出现错误;覆盖了⽗类⽅法却没实现⽗类⽅法的职责 -》继承时没有实现某些方法;
    • 原则7:接⼝隔离原则

      • 不应该强迫客户依赖于他们不⽤的⽅法;
      • ⼀般⽤于处理⼀个类拥有⽐较多的接⼝,⽽这些接⼝涉及到很多职责;
    • 原则8:对象组合优于类继承

      • 继承耦合度****⾼,组合耦合度**低;

什么情况下使⽤设计模式?

  • 系统的关键依赖点;
  • 能明确找到变化点;
  • 能明确找到复⽤⽅向;
  • 对需求变化⽅向熟悉;

如何找到设计模式?

  • 从重构中获得;
  • 重构
    • 静态转变为动态
    • 早绑定转变为晚绑定
    • 继承转变为组合
    • 编译时加载转变为运⾏时加载
    • 紧耦合转变为松耦合

为什么要学习设计模式?

  • 从已有的且证明有效的设计模式中获取灵感,少⾛弯路;
  • 通⽤语⾔,知道在已有的设计模式扩展代码;
  • 体会模式设计,设计⾃⼰的⾏之有效的设计模式;

学习设计模式的步骤

  • 深刻体会上⾯的原则;
  • 理解设计模式,能知道设计模式的变化点和稳定点
  • 能在已使⽤的设计模式中,知道如何写扩展
  • 能在复杂需求中,抽象出已有设计模式;
  • 能在重构中,开发⾃⼰的设计模式;

扩展

  • 多个子类中重复的流程合并到父类中,变化的流程暴露出去,子类的处理变为单一

posted on 2023-03-20 18:09  ZqurGy  阅读(44)  评论(0编辑  收藏  举报