java设计原则

单一职责

  1. 定义:一个类或者模块只负责完成一个职责。
  2. 目的:高内聚,低耦合,提高复用性,可读性,可维护性
  3. 变化:先写一个粗粒度的类,满足需求,后面业务发展,再拆分。
  4. 如何判定是否单一
    1. 代码行数、函数、属性过多
    2. 依赖的其他类过多,或依赖类的其他类过多
    3. 私有方法过多
    4. 难于区合适的名字
    5. 类中大量的方法都在集中操作类中的某几个属性
  5. 是否越单一越好
    1. 太单一减少了内聚性

开闭原则

  1. 定义:添加一个新功能应该是,在已有的代码基础上扩展(新增模块,类,方法等),而非修改已有代码(修改模块,类,方法等)
  2. 评判标准:不破坏原有代码的正常运行,不破坏原有的单元测试
  3. 理解:
    1. 并不是完全杜绝修改,而是以最小的修改完成新功能开发
    2. 同样的代码,在粗粒度可能为“修改”,在细粒度为“扩展”
  4. 如何做
    1. 意识:扩展,抽象,封装
    2. 可能有哪些变更,事先留好扩展点。

里式替换和多态的区别

  1. 核心:按照协议来设计,子类和父类逻辑一样
  2. 里斯替换:是一种设计原则
  3. 多态:是一种语法

接口隔离

  1. 定义:客户端不应该被强迫依赖他不需要的接口
  2. 接口理解:
    1. 一组API接口集合
    2. 单个API接口或者函数
    3. OOP中接口
  3. 在设计微服务或者类库接口的时候,如果部分几口只被部分调用者使用,那我们旧机房这部分接口隔离出来。
  4. 接隔离与单一职责区别
    1. 单一职责:对模块,类,接口
    2. 接口隔离:侧重接口设计,判断接口职责是否单一的标准。

控制翻转,依赖翻转,依赖注入

  1. 控制反转
    1. 控制:对程序执行流程的控制
    2. 反转:
      1. 没有使用框架之前,程序员自己控制
      2. 使用框架:框架控制流程
  2. 依赖注入:
    1. 不在类内部创建依赖对象,在外部创建好之后,通过构造函数、函数参数等方式传递给类
  3. 依赖注入框架
    1. 对象创建,管理对象生命周期,依赖注入
  4. 依赖反转
    1. 高层底层共同依赖抽象

kiss原则,yagni原则

  1. kiss原则:保持简单
    1. 不要使用同事可能不懂的技术实现
    2. 不要重复造轮子
    3. 不要过度优化
  2. YAGNI:你不需要它
    1. 不要去设计当前不需要的功能

DRY:提高代码复用性

  1. dry
    1. 实现逻辑重复:逻辑重复,语义不重复-》不重复
    2. 功能语义重复:实现逻辑不重复,语义重复-》重复
    3. 代码执行重复:多次执行相同代码-》重复
  2. 复用性
    1. 减少代码耦合
    2. 单一职责:越细粒度的代码通用性越好
    3. 模块化:功能独立的代码,封装成模块
    4. 业务非业务逻辑分离:非业务逻辑易复用
    5. 通用代码下沉:
    6. 继承、多态、抽象、封装
    7. 应用模板等设计模式

迪米特实现高内聚低耦合

  1. 高类聚,低耦合
    1. 高类聚:相近的功能放在一个类中,不想近的功能不要放在一个类中
    2. 松耦合:
      1. 类与类之间依赖关系简单清晰。
      2. 一个类的代码改动不会或者很少导致依赖代码的改动
  2. 迪米特
    1. 不该依赖的类之间不要有依赖
    2. 有依赖的类之间,尽量只依赖必要的接口
  3. 实战1:不应该有直接依赖关系的类,不要有依赖
    1. 只传入需要的数据,(给钱,而不是钱包)
    2. 基于接口编程
    3. 不依赖不应该依赖的对象
  4. 实战二:有依赖关系的类之间,尽量只依赖接口
    1. 高内聚:功能在一个类中
    2. 低耦合:通过接口隔离,实现不同功能接口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值