当前位置: 首页 > news >正文

作业 单一职责和开闭原则的代码重构实践

单一职责与开闭原则的代码重构实践

一、单一职责原则

原始的 Login 类承担了太多职责:界面初始化、显示、验证、数据库连接、用户查询等,不符合单一职责原则。

重构思路:按职责拆分,每个类只负责一件事

  1. 职责拆分方案
    // 职责1:界面交互(UI层)
    public class LoginUI {
    public void init() { /* 初始化界面 / }
    public void display() { /
    显示界面 */ }
    }

// 职责2:用户验证(业务逻辑层)
public class LoginValidator {
public boolean validate(String username, String password) {
UserDAO dao = new UserDAO();
return dao.findUser(username, password);
}
}

// 职责3:数据库操作(数据访问层)
public class UserDAO {
public Connection getConnection() { /* 获取数据库连接 / }
public boolean findUser(String username, String password) { /
查询用户 */ }
}

// 主入口
public class LoginMain {
public static void main(String[] args) {
LoginUI ui = new LoginUI();
LoginValidator validator = new LoginValidator();

ui.init();
ui.display();

// 获取用户输入并验证
boolean success = validator.validate("admin", "123456");
System.out.println(success ? "登录成功" : "登录失败");
}
}

重构后,界面、业务逻辑、数据访问职责分离,任何一处修改都不会影响其他模块。

二、开闭原则

原始设计中,ChartDisplay 需要根据 type 来判断创建哪种图表,新增图表时必须修改 ChartDisplay 的代码,违反了开闭原则。

重构思路:抽象接口 + 依赖注入,对扩展开放,对修改关闭

  1. 重构代码示例
    // 抽象图表接口
    public interface Chart {
    void display();
    }

// 饼状图实现
public class PieChart implements Chart {
@Override
public void display() {
System.out.println("显示饼状图");
}
}

// 柱状图实现
public class BarChart implements Chart {
@Override
public void display() {
System.out.println("显示柱状图");
}
}

// 新增折线图,无需修改原有代码
public class LineChart implements Chart {
@Override
public void display() {
System.out.println("显示折线图");
}
}

// 显示类(依赖抽象,不依赖具体实现)
public class ChartDisplay {
private Chart chart;

// 通过构造器注入具体图表对象
public ChartDisplay(Chart chart) {
this.chart = chart;
}

public void display() {
chart.display();
}
}

// 客户端调用
public class Client {
public static void main(String[] args) {
Chart pie = new PieChart();
Chart bar = new BarChart();
Chart line = new LineChart();

ChartDisplay display1 = new ChartDisplay(pie);
ChartDisplay display2 = new ChartDisplay(bar);
ChartDisplay display3 = new ChartDisplay(line);

display1.display();
display2.display();
display3.display();
}
}

重构后,新增图表类型只需实现 Chart 接口即可,无需修改 ChartDisplay,完全符合开闭原则。

核心对比

原则 核心思想 本次应用要点
单一职责原则 一个类只负责一个职责 将 Login 拆分为 UI、验证、DAO 三层
开闭原则 对扩展开放,对修改关闭 定义 Chart 接口,新增图表无需修改显示类

http://www.jsqmd.com/news/998346/

相关文章:

  • 计算机毕业设计之吉他乐谱推荐交流网站的实现
  • 把产品功能/应用封装为 Agent 可用的 Skill 技能
  • 卫生间漏水到楼下怎么查找漏水点?2026乌海24小时上门维修电话TOP7机构推荐,免费勘察+精准定位,专业师傅处理屋顶墙体洗手间暗管漏水 - 一修哥咨询
  • 2007-2024年上市公司企业家信心指数
  • 公众号被判低创作度内容,同质化和纯AIGC的原因分析和真实的解决方案
  • MATLAB音频处理入门实战:变声、回声、频谱可视化一键运行示例
  • Java写的便利店收银系统源码,带网页界面和后台逻辑,开箱即用
  • 卫生间漏水到楼下怎么查找漏水点?2026新余24小时上门维修电话TOP7机构推荐,免费勘察+精准定位,专业师傅处理屋顶墙体洗手间暗管漏水 - 一修哥咨询
  • 别再死记公式了!手把手教你算清摄像头MIPI CSI-2接口的真实带宽(附Python脚本)
  • 从敏捷实战反推PMP:Scrum Master如何用‘规划相关方参与’搞定难缠的客户?
  • 2026延安最新黄金回收价格表 避坑攻略商家推荐 - 余生黄金回收
  • 你的Google验证码为什么30秒一变?保姆级图解TOTP算法核心原理与安全设计
  • 解锁思维潜能:这款开源工具让创意整理如此简单
  • 2026最新抚州市黄金回收价格一览表回收避坑攻略及靠谱商家推荐 - 润富黄金回收
  • 医用超声图像模拟系统:探头位置模拟与临床图像切面的对应算法
  • 深圳同款钻戒回收价格差距大?参考行业白皮书,看懂禹竞名奢汇鉴定评估标准 - 名奢变现站
  • MySQL 数据库事务
  • 一些可能需要的skill支持参考资料
  • FPGA工程师的硬件思维课:从IIC总线的“线与”特性,彻底搞懂为什么必须加上拉电阻和开漏输出
  • 告别焊球!用混合键合(Hybrid Bonding)给芯片“叠罗汉”,性能翻倍的秘密
  • 指针式仪表图像自动读数方案:OpenCV预处理+k-means刻度分割+角度映射
  • 2026宝鸡出手黄金铂金白银回收避坑指南 5 家经营多年实体回收门店走访测评 + 详细地址(更新时间:2026-06-12_11:10:26) - 中业金奢再生回收中心
  • 2026杭州搬家公司推荐 适配全场景需求指南 - 资讯快报
  • Windows下开箱即用的CTF解题工具包,带猪圈密码图解和插件热加载功能
  • 计算机毕业设计之计算机网络题库平台设计与实现
  • 2000-2024年新闻文本数据
  • 对数正态分布:乘性过程下非负右偏数据的天然建模语言
  • FPGA可用的128位AES加密Verilog代码包,含S盒与密钥扩展模块
  • 2026宁波标识设计公司评测:多维度对比甄选优质服务商 - 奔跑123
  • FastAPI-Backend-Template完全指南:如何用FastAPI+PostgreSQL构建高性能异步后端