You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:16:56