AI面试总结:wait()和sleep()区别
前言 wait()和sleep()是java面试中比较常见的...
单一职责原则(SRP)让一个类只负责一件事。
修改一个类的原因应该只有一个
如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化会削弱这个类完成其他职责的能力。
开放封闭原则(OCP),添加新功能时不需要修改代码。
类对扩展开发,对修改封闭
符合开闭原装最典型的设计模式就是装饰者模式,它可以动态的将职责添加到对象上,而不是去修改类的代码。
里氏替换原则(LSP)
继承是一种IS-A的关系,子类需要能够当成父类来使用,并且需要比父类更特殊。
子类对象必须能够替换掉所有父类对象
接口分离原则(ISP)
不应该强迫客户依赖于他们不用的方法
多个专门的接口比使用总接口更好。
也就是一个接口中,只做该接口的功能,不要添加不需要或者其他的功能。
依赖倒置原则(DIP)
高层模块不应该依赖于底层模块,两者都应该依赖于抽象。
抽象不应该依赖于细节,细节应该依赖于抽象。
高层模块包含一个应用程序中最重要的策略和选择和业务模块,如果高层模块依赖于底层模块,那么底层模块的改动会直接影响到高层模块,从而迫使高层模块也需要改动。
提供具体实现细节和基础功能
可被替换,面向具体技术,为高层的业务目标服务
包含系统的核心业务逻辑、策略和用例
不关心怎么实现,只要定义具有什么能力,比如(订单处理、支付流程和权限效验等功能框架,里面细节就必要清楚)
比如,我要保存数据,高层不需要知道怎么实现的,也就不关心是否用数据库还是文件存储等细节。
简单对比:
| 维度 | 高层模块 | 低层模块 |
|---|---|---|
| 关注点 | 业务规则 / 策略 | 技术细节 / 具体操作 |
| 变化频率 | 相对少(核心不变) | 较频繁(可换实现) |
| 依赖方向 | 应依赖抽象 | 实现抽象接口 |
| 类比 | 公司管理层(定目标) | 基层员工(干具体活) |