首页 > 其他分享 >设计原则

设计原则

时间:2023-03-20 18:24:55浏览次数:31  
标签:依赖 原则 扩展 Base 设计 设计模式 变化

设计模式

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

内存模型

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

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

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

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

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

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

模式设计原则

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

  • 八个原则

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

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

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

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

    • 原则2:开放封闭原则

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

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

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

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

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

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

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

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

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

如何找到设计模式?

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

为什么要学习设计模式?

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

学习设计模式的步骤

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

扩展

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

标签:依赖,原则,扩展,Base,设计,设计模式,变化
From: https://www.cnblogs.com/zqurgy/p/17231892.html

相关文章

  • PCB设计怎么避坑
        前文介绍了PCB电路板设计生产指南 、PCB板孔壁分离的影响原因 、PCB板设计注意事项等等PCB设计注意事项。本文就重点讲解PCB设计避坑指南,99%的PCB工程师容易......
  • 基于Kubernetes的平台设计和实现
    一、背景介绍1.1问题随着移动互联网的蓬勃发展,业务逻辑愈发复杂,规模愈发庞大,更新迭代愈发频繁,用户对应用程序的Qps和SLA有了更高的要求:更高效、更灵活和更可靠。面......
  • 从ETL走向EtLT架构,下一代数据集成平台Apache SeaTunnel核心设计思路解析
    1.ETL到EtLT架构演进2.数据集成领域的痛点&常见的解决方3.下一代数据集成平台ApacheSeaTunnel4.SeaTunnel的核心架构及设计5.下一代数据集成引擎SeaTunnelZeta......
  • im协议设计选型
    一、im协议的分层设计所谓“协议”是双方共同遵守的规则,例如:离婚协议,停战协议。协议有语法、语义、时序三要素。(1)语法:即数据与控制信息的结构或格式(2)语义:即需要发出何种控......
  • 自主移动机器人AMR控制器设计与试验(一)
    近年来,随着社会和技术发展,自主移动已经成为了仓储物流[1]、无人驾驶[2]、快递配送[3]等众多领域中机器人需要具备的一项重要能力,同时也对其长期鲁棒性提出......
  • 论如何设计一款端对端加密通讯软件
    前言本文仅讨论设计思路,软件demo已经写好,是基于QT版本编写的,后期会挂在我的gitee上供大家参考,本文中部分片段代码均为demo中的代码片段。设计架构在目前IPv4的大前提下,为了......
  • 设计师必备:免费素材管理工具Billfish v3.0更新了!
    ​​Billfish是专门为设计师打造的图片收藏管理工具,可以轻松管理您的各种素材文件。Billfish是一个免费的软件,支持对大量的图片素材进行管理,提供多种快速的检索筛选功能,如......
  • 接口自动化测试——用例设计(五)
    引言与UI相比,接口一旦研发完成,通常变更或重构的频率和幅度相对较小。因此做接口自动化的性价比更高,通常运用于迭代版本上线前的回归测试中。手工做接口测试,测试数据和参......
  • 基于ARM+FPGA的移动机器人控制器设计
    XM-AMR-5728系列控制器是为移动机器人(AMR、智能叉车等)设计的通用控制器,为移动机器人提供地图构建、定位导航、模型编辑等核心功能。本产品将移动机器人的核心组件集成于一......
  • 基于ZYNQ7020 ARM+FPGA的运动控制器设计方案
    ZYNQ7020系列运动控制器,支持6轴脉冲+16/32轴总线控制,本地36输入,24输出,RS232/485和TCP通讯。ZYNQ7020系列:1.本地脉冲轴数:6轴带编码器反馈,编码器输入最高频率:4MHz2.最大脉......