接口是面向对象抽象、解耦、多态的核心体现,是行为能力的抽象规范。接口只定义标准不关注实现,彻底分离声明与实现,有效降低代码耦合度,支持多实现特性,是项目解耦、标准化、多态编程的核心手段。
场景1:行为规范定义(统一业务标准)
用于定义一组通用业务行为规范,强制所有实现类遵循统一方法标准,保证同类业务功能接口统一,避免不同实现类方法命名、逻辑入口混乱,统一团队开发编码规范。

// 支付能力规范:所有支付方式必须实现该能力
public interface PayService {
    // 统一支付方法
    boolean pay(Long orderId, double money);
    // 统一退款方法
    boolean refund(Long orderId, double money);
}

// 支付宝实现
public class AliPayService implements PayService {
    @Override
    public boolean pay(Long orderId, double money) {
        System.out.println("支付宝发起支付,金额:" + money);
        return true;
    }

    @Override
    public boolean refund(Long orderId, double money) {
        System.out.println("支付宝发起退款,金额:" + money);
        return true;
    }
}

// 微信支付实现
public class WechatPayService implements PayService {
    @Override
    public boolean pay(Long orderId, double money) {
        System.out.println("微信发起支付,金额:" + money);
        return true;
    }

    @Override
    public boolean refund(Long orderId, double money) {
        System.out.println("微信发起退款,金额:" + money);
        return true;
    }
}

场景2:解耦业务代码(面向接口编程)
遵循面向接口编程思想,业务层只依赖接口、不依赖具体实现类,彻底解除代码硬耦合。后续替换、新增实现类无需修改上层业务代码,完美符合开闭原则。

public class OrderBusiness {
    // 只依赖接口,不依赖具体实现
    private PayService payService;

    // 构造器注入,灵活切换实现类
    public OrderBusiness(PayService payService) {
        this.payService = payService;
    }

    public void createOrderPay(Long orderId, double amount) {
        payService.pay(orderId, amount);
    }
}

// 使用方式:随时切换支付实现,业务代码无需改动
public class Test {
    public static void main(String[] args) {
        // 切换实现类,零侵入修改业务
        OrderBusiness orderBusiness = new OrderBusiness(new AliPayService());
        orderBusiness.createOrderPay(1001L, 99.9);
    }
}

场景3:多能力拓展(弥补单继承缺陷)
Java类是单继承结构,无法同时继承多个父类,通过接口多实现特性,可以让一个类同时拥有多种不同的业务能力,灵活拓展功能,不破坏原有继承体系。

// 支付能力
public interface PayAbility {
    void pay(double money);
}

// 积分能力
public interface ScoreAbility {
    void addScore(int score);
}

// 会员类同时拥有支付、积分两种能力
public class VipUser implements PayAbility, ScoreAbility {
    @Override
    public void pay(double money) {
        System.out.println("会员支付:" + money);
    }

    @Override
    public void addScore(int score) {
        System.out.println("会员新增积分:" + score);
    }
}

学习心得
接口的核心价值就是定义规范、解耦代码、拓展能力。和抽象类侧重共性抽取不同,接口侧重行为标准约束。日常开发坚持面向接口编程,可以大幅降低代码耦合,提升程序扩展性和复用性,是企业级项目开发的核心编码思想。

更多推荐