标签:数据结构 导出 指针 交互 test 算法 架构 封装 软件设计
高内聚 低耦合
每个类都应该只有一个引起它变化的原因
对扩展开放(只需要增加新的类),对修改封闭(原则上不应修改原有的任何代码),当然指的是被第一颗子弹击中的时候进行这样的设计,被第一颗子弹击中指的是变化的方向第一次明确,如果是一个崭新的需求,则和本原则无关,所以本原则关注的是 1到2 的过程,而不是 0到1 的过程
一个子类的实例应该能够替换其任何父类的实例时,它们之间才具有 is-A 关系
一个面孔多个形态,适时选择,在哪个地方做选择则会导出不同形式的多态
一个类要在其一个成员函数里面完成一个算法,其数据来源只可能有以下三个:类自身持有的数据,函数的参数,全局变量。而一个高内聚低耦合的设计应该使得每个模块(最小单位是类)之间的交互尽可能少,算法所需的数据大都是自身持有,只有少部分数据由参数传入或者是全局变量。
既然高内聚低耦合的设计中数据流通是尽可能少的,那么只要我们不断根据模块之间的数据流动来调整模块的自身结构,就可以使得类的设计能够做到高内聚低耦合,在这个调整的过程中,根据数据的交互关系,也就知道了哪些数据应该被定义成成员变量,哪些数据应该被定义成全局变量,哪些参数应该被当成函数参数。在考虑类之间关系的时候也需要考虑各个变量的生命周期。
visitor 能传的参数其实是函数指针,
一种是定义的自由函数
一种是函数类(类重载了() 运算符,能够处理参数)
在引入lambda表达式之后,能够很方便地完成以前需要使用函数类才能完成的功能,而且 lambda 表达式的引入也解决了定义函数类的复杂性
往往策略是纯算法类,则可以作为常量存在,如果内部需要数据的话,则是需要创建实例
策略不应该变成使用策略的类的成员变量
策略是闭包的 策略里面包含策略还是策略
fake 用内存数据库替换实际数据库
stub 将用到的函数给一个简单的使用,链接不使用原本的函数,使用stub的函数
mock 一个测试框架
定义的一个枚举类型和枚举变量之间的关系,也是一个 is-A的关系
有时候会使用枚举来建立一个映射关系,可以想想这个枚举类型是不是一定是必须的,能不能直接用枚举变量对应的映射量作为判断的依据
不同类组合在一起,完成一些功能
组合式设计 Format(Length(1,Mile), BASE)
标签:数据结构 导出 指针 交互 test 算法 架构 封装 软件设计
原文地址:https://www.cnblogs.com/race-with-unknown/p/10807110.html