如何用Java创建自定义接口并实现业务逻辑隐藏(附示例)
用接口实现名称显示与业务逻辑隐藏的正确姿势
嘿,我来帮你梳理清楚怎么通过接口实现名称显示,同时做到业务逻辑隐藏~你的思路是对的,但在客户端(MainApp)的实现上有点偏差,下面一步步来修正和解释:
核心思路:接口的作用是「暴露必要能力,隐藏实现细节」
我们要让客户端只知道接口定义的方法(比如getName()),而业务类的内部逻辑(比如私有属性name、setName()方法)对客户端完全不可见,以此实现逻辑隐藏。
修正后的代码示例
1. 定义业务接口
这个接口只声明我们需要对外暴露的方法,不需要多余内容:
public interface BusinessLogicInterface { String getName(); }
2. 实现业务逻辑类
这个类是真正的业务逻辑载体,它实现接口,同时可以包含内部需要的属性和方法(这些对外隐藏):
public class BusinessLogic implements BusinessLogicInterface { // 私有属性,外部无法直接访问 private String name = "I am business data"; // 实现接口要求的方法,对外暴露名称获取能力 @Override public String getName() { return name; } // 内部方法,只有业务类自己或授权的代码能调用,客户端看不到 public void setName(String name) { this.name = name; } }
3. 客户端调用(MainApp)
客户端不需要实现接口,而是通过接口类型来引用业务类的实例,这样客户端只能调用接口中定义的方法,完全不知道业务类的其他细节:
public class MainApp { public static void main(String[] args) { // 用接口类型引用实现类实例,客户端只知道BusinessLogicInterface的方法 BusinessLogicInterface business = new BusinessLogic(); // 调用接口方法获取名称 String businessName = business.getName(); System.out.println(businessName); // 输出: I am business data // 这里无法调用setName(),因为接口里没有定义,实现了逻辑隐藏 // business.setName("New Name"); // 这行代码会报错! } }
为什么这样能实现业务逻辑隐藏?
- 客户端依赖抽象而非具体实现:MainApp只知道
BusinessLogicInterface,不知道BusinessLogic的存在(甚至可以把BusinessLogic放到单独的包中,只对外暴露接口)。 - 内部细节不可见:业务类的私有属性、非接口方法(比如
setName())对客户端完全不可访问,只能通过接口规定的方法交互。 - 扩展性强:如果后续需要更换业务实现(比如另一个
AnotherBusinessLogic类也实现BusinessLogicInterface),客户端只需要修改实例化的代码,其他逻辑完全不用动。
额外提示
如果想进一步隐藏业务类的实例化过程,可以用工厂模式:创建一个工厂类来生成BusinessLogicInterface的实例,客户端连实例化的细节都不用知道,彻底解耦。
内容的提问来源于stack exchange,提问作者Chandhan Sai
相关产品推荐
相关产品推荐

