当前位置: 首页 > 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.gsyq.cn/news/1510115.html

相关文章:

  • 卫生间漏水到楼下怎么查找漏水点?2026乌海24小时上门维修电话TOP7机构推荐,免费勘察+精准定位,专业师傅处理屋顶墙体洗手间暗管漏水 - 一修哥咨询
  • 别再死记公式了!手把手教你算清摄像头MIPI CSI-2接口的真实带宽(附Python脚本)
  • 2026延安最新黄金回收价格表 避坑攻略商家推荐 - 余生黄金回收
  • 解锁思维潜能:这款开源工具让创意整理如此简单
  • FPGA工程师的硬件思维课:从IIC总线的“线与”特性,彻底搞懂为什么必须加上拉电阻和开漏输出
  • 2026宝鸡出手黄金铂金白银回收避坑指南 5 家经营多年实体回收门店走访测评 + 详细地址(更新时间:2026-06-12_11:10:26) - 中业金奢再生回收中心
  • 一些可能需要的skill支持参考资料
  • 深圳同款钻戒回收价格差距大?参考行业白皮书,看懂禹竞名奢汇鉴定评估标准 - 名奢变现站
  • FPGA可用的128位AES加密Verilog代码包,含S盒与密钥扩展模块
  • 2026宁波标识设计公司评测:多维度对比甄选优质服务商 - 奔跑123
  • Windows下开箱即用的CTF解题工具包,带猪圈密码图解和插件热加载功能
  • 对数正态分布:乘性过程下非负右偏数据的天然建模语言
  • 2000-2024年新闻文本数据
  • 医用超声图像模拟系统:教学模块设计与实现
  • MSPM0G3507上跑通JY60陀螺仪:带欧拉角解算的CCS Theia可运行工程
  • 深蓝词库转换器:终极开源词库转换解决方案
  • 微信投票小程序哪个好?2026最新实测防刷排名|火星投票永久免费零广告 - 微信投票小程序
  • 2026年重庆西南铝铝材深度评测:汽车轻量化与工业应用选型指南 - 新闻快传
  • Memoria 全新功能上线:借助记忆分支与协作空间,像协作代码一样协作 Agent 记忆
  • 医患沟通评价系统(1)——前期准备工作
  • Prophet外部变量实战指南:从选型、编码到归因的全流程避坑
  • STM32G030F6P6串口ISP升级包:开箱即用的Bootloader工程+上位机烧录工具
  • 2026 上饶防水补漏服务商口碑测评榜单|全屋渗漏维修机构优选指南 - 宅安选房屋修缮
  • MusicFree插件开发完全指南:三分钟构建跨平台音乐聚合应用
  • 字符串处理不是切片拼接:编码协议、性能瓶颈与安全边界的实战指南
  • 告别玄学调参:手把手教你用WRF的Grid Nudging同化高空场(风、温、湿变量详解)
  • 图片转换王 支持【Al、PSD、PSB、PDF、RAW等格式】
  • 人在环路(HITL):机器学习落地的可靠性基石
  • Krita AI Diffusion终极指南:如何在Krita中实现影视级AI绘画与智能编辑
  • 如何在Blender中解决虚幻引擎模型与动画的导入导出难题