模块
模块就是从逻辑上将系统分解为更细微的部分 , 分而治之 , 复杂问题拆解为若干简单问题 , 逐个解决 。
耦合主要描述模块之间的关系 , 内聚主要描述模块内部 。模块的粒度可大可小 , 可以是函数 , 类 , 功能块等等 。
耦合
模块之间存在依赖 , 导致改动可能会互相影响 , 关系越紧密 , 耦合越强 , 模块独立性越差 。
比如模块A直接操作了模块B中数据 , 则视为强耦合 , 若A只是通过数据与模块B交互 , 则视为弱耦合 。
独立的模块便于扩展 , 维护 , 写单元测试 , 如果模块之间重重依赖 , 会极大降低开发效率 。
文章插图
内聚
【耦合摆原理 耦合是什么意思通俗点】模块内部的元素 , 关联性越强 , 则内聚越高 , 模块单一性更强 。一个模块应当尽可能独立完成某个功能 ,
如果有各种场景需要被引入到当前模块 , 代码质量将变得非常脆弱 , 这种情况建议拆分为多个模块 。
低内聚的模块代码 , 不管是维护 , 扩展还是重构都相当麻烦 , 难以下手 。
文章插图
接口设计原则
好的接口应当满足设计模式六大原则 , 很多设计模式 , 框架都是基于高内聚低耦合这个出发点的 。
- 单一职责原则:一个类只负责一个功能领域中的相应职责 。
- 开闭原则:一个软件实体应当对扩展开放 , 对修改关闭 。
- 里氏代换原则:所有引用基类(父类)的地方必须能透明地使用其子类的对象 。
- 依赖倒转原则:抽象不应该依赖于细节 , 细节应当依赖于抽象 。换言之 , 要针对接口编程 , 而不是针对实现编程 。
- 接口隔离原则:使用多个专门的接口 , 而不使用单一的总接口 , 即客户端不应该依赖那些它不需要的接口 。
- 迪米特法则: 一个软件实体应当尽可能少地与其他实体发生相互作用 , 例如外观模式 , 对外暴露统一接口 。
外观模式
为系统中多个子系统提供一致的对外调用 , 对客户端隐藏子系统细节 , 降低其与子系统的耦合 。
文章插图
桥接模式
JDBC中的把面向厂商的接口(Driver)和面向使用者的API(DriverManager)做了拆分隔离 。
// 开发者只需要关注JDBC API, 无需关注不同数据库Driver接口实现Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection(url, username, password);
文章插图
适配器模式
引入第三方库(hibernate , log4j) , 不应该直接在代码中继承或者使用其实体类 。
需要抽出上层统一接口 , 然后增加实现类 , 对外暴露接口 。
// 代码与log4j强耦合, 不推荐org.apache.log4j.Logger.getRootLogger().info("info");// 底层可以随意更换log框架FRLoggerFactory.getLogger().info("info");
文章插图
- 马桶进水阀原理如何快速解决马桶进水阀不止水
- 射频美容仪原理是什么 皮薄敏感肌不适合用
- 甘尼克免洗洗手液好吗?甘尼克免洗洗手液原理
- 三极管的原理和用途介绍 什么是三极管
- 盗号|腾讯QQ疑似出现大面积盗号!自动给好友和群发送违法内容,网友质疑:QQ安全中心就是个摆设?
- 花卉市场租摆花卉 花卉植物租赁公司
- 空气开关的工作原理 空气开关的品牌推荐
- 净化空气的室内盆栽 室内花卉园艺租摆
- 晚上摆地摊卖什么好(夜间摆摊买哪些商品受欢
- 免洗洗手液的原理是什么 免洗洗手液比水洗更干净吗