Java中类实现与接口Hard Couple是否合理?该Builder设计是否可取?
public interface Car { static Builder createBuilder() { return new CarImpl.Builder(); } interface Builder { /// Setters contract } }
这个设计是符合面向对象设计原则的合理实现,属于Builder模式在接口隔离场景下的典型用法,核心价值体现在以下几点:
- 实现了接口与具体逻辑的完全解耦:上层调用方只需要依赖
Car接口以及配套的Builder契约,完全不需要感知CarImpl这个实现类的存在。后续如果需要替换Car的实现(比如把燃油车实现换成新能源车实现),只需要修改createBuilder()方法内部的返回值即可,所有上层调用代码不需要做任何改动,可扩展性极强。 - 统一了Builder的使用规范:嵌套在
Car接口内的Builder接口明确约定了所有属性设置方法的签名、入参规则,不管后续新增多少种Car的实现类,对应的Builder都必须遵守这个契约,不会出现不同实现的Builder用法不一致的问题,降低了调用方的学习成本。 - 简化了调用逻辑:调用方不需要记忆具体Builder实现类的类名,也不需要手动实例化Builder,直接调用
Car.createBuilder()就能拿到符合要求的Builder实例,代码更简洁,也避免了调用方错误实例化不兼容的Builder实例的问题。
适用场景与注意事项
- 该设计非常适合业务层只需要和
Car接口交互、不需要感知具体实现类的架构场景 - 如果需要支持多种
Car子类的构建,也可以给createBuilder()方法增加入参,根据参数返回对应实现类的Builder实例,灵活性很高 - 需要注意
CarImpl以及其内部Builder类的访问权限设置,避免出现跨模块调用时的权限异常问题
内容的提问来源于stack exchange,提问作者Miraj Tzunami
相关产品推荐
相关产品推荐

