小米DSA通讯部分说明
分布式系统
软件架构
本文字数: 183 阅读时长 ≈ 1 分钟
软件架构入门笔记
Git 添加gitignore后不起作用
本文字数: 527 阅读时长 ≈ 1 分钟
gitignore - Specifies intentionally untracked files to ignore
MagicInfo三星多显示器配置
本文字数: 849 阅读时长 ≈ 1 分钟
三星MagicInfo显示器配置简单说明
重点在多图像切换的配置
HUD机器人标定及验证
本文字数: 1.7k 阅读时长 ≈ 2 分钟
HUD相机标定完成后辅助调节机器人角度时角度的计算方法
Git拆分仓库
将功能复杂的版本库拆分为功能单一的版本库并保存所有相关提交信息
扩展方法
本文字数: 416 阅读时长 ≈ 1 分钟
C# 扩展方法, 通过.的方式执行
GUID/UUID
本文字数: 94 阅读时长 ≈ 1 分钟
UML-PlantUML
本文字数: 1.1k 阅读时长 ≈ 1 分钟
类图
1 | class Student |
1 | //方法属性 |
类之间关系
泛化关系
继承非抽象类
继承关系为 is-a的关系;两个对象之间如果可以用 is-a 来表示
1 | //B继承自A |
实现关系
实现关系表现为继承抽象类
1 | //B继承自A |
聚合关系
与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在
1 | //B聚合到A上,或者说A由B组成 |
组合关系
1 | //说A由B组成 |
关联关系
描述不同类的对象之间的结构关系
比如,乘车人和车票之间就是一种关联关系;学生和学校就是一种关联关系
关联关系默认不强调方向,表示对象间相互知道;如果特别强调方向,如下图,表示B知道A,但 A不知道B
1 | class A { |
依赖关系
一种临时性的关系,通常在运行期间产生,并且随着运行时的变化; 依赖关系也可能发生变化
一个对象在运行期间会用到另一个对象的关系
应该保持单向依赖,杜绝双向依赖的产生
1 | class A { |
设计模式-MVC模式
Model(模型) - 模型代表一个存取数据的对象
View(视图) - 视图代表模型包含的数据的可视化
Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开
设计模式-总结
设计模式-访问者模式
将数据结构与数据操作分离, 用于稳定的数据结构和易变的操作耦合问题
设计模式-解释器模式
给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子
设计模式-享元模式
用于减少创建对象的数量,以减少内存占用和提高性能
运用共享技术有效地支持大量细粒度的对象
在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建
用 HashMap(Hashtable) 存储这些对象
string 运用了Flyweight模式
设计模式-中介者模式
用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互
对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理
设计模式-职责链模式
避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止
职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了
设计模式-命令模式
请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令
设计模式-桥接模式
将抽象部分与实现部分分离,使它们都可以独立的变化
需要多角度去分类实现对象, 而只用继承会造成大量的类增加, 不能满足开放-封闭原则时, 就应该要考虑用桥接模式
适用于一个类存在两个独立变化的维度, 且每个维度都需要进行扩展
设计模式-迭代器模式
学习其实现方式