代码重构: 实际的例子去讲解如何使用【策略模式+单一职责】去重构不断增长的业务代码
当前公司的业务代码中存在类似一下的代码逻辑: 原有的 随着解析类型的增加,这种写法会带来: 那么如何重构代码呢? 当需要支持新的解析类型(如 Vue / React / Markdown)时: 将“解析代码”抽象为一个统一接口: 表达的设计意图是: 每个解析类: 新增解析类型时: 无需修改已有解析类。 后续如果需要: 当前结构 无需推倒重来。 当引入第三方解析库时: 此时才会自然引入 Adapter。
一个代码解析器 然后内部存在一个不断增长的解析代码public class CodeParser{
static parseHtml();
static parseCSS();
static parseJSP();
static ParseJAVA();
static ParsePython();
}CodeParser 类将 多种代码解析逻辑集中在一个类中,通过静态方法区分不同解析方式。CodeParser二、原始设计的问题
1. 职责过于集中
public class CodeParser {
parseHtmlCode(...)
parseCSS(...)
}2. 扩展方式不可控
CodeParser 中新增方法三、重构的核心思路
将不同的解析逻辑拆分成独立的类,每个类只负责一种解析方式,从而提升可维护性和扩展性。
四、重构后的设计思路
1. 抽象解析行为
public interface CodeParser<T> {
T parse(String content);
}“代码解析是一种行为,可以有多种实现。”
2. 拆分不同解析实现
HTML解析
public class HtmlCodeParser implements CodeParser<HtmlCodeResult> {
@Override
public HtmlCodeResult parse(String content) {
}
}CSS 解析
public class CSSCodeParser implements CodeParser<CSSCodeResult> {
@Override
public CSSCodeResult parse(String content) {
}
}五、重构的好处
1. 可维护性显著提升
2. 扩展成本更低
class VueCodeParser implements CodeParser { ... }3. 为未来演进留好空间
六、与 Adapter / Strategy 的关系说明
当前阶段
未来可能演进
ThirdPartyParser -> CodeParser七、总结
**本次重构的目的,是将不同代码解析逻辑按职责拆分,
降低单个类复杂度,提高系统的可维护性与可扩展性。**