“面向接口编程”就是:代码依赖的是“能力约定”,而不是某个具体实现。
可以把接口理解成一份合同:它规定“你必须提供哪些方法、输入什么、返回什么”,但不关心你内部怎么做。
比如:
class Payment: def pay(self, amount): pass这表示:只要你是一个Payment,你就应该能pay(amount)。
然后可以有不同实现:
class AliPay(Payment): def pay(self, amount): print(f"支付宝支付 {amount}") class WeChatPay(Payment): def pay(self, amount): print(f"微信支付 {amount}")业务代码不要直接依赖AliPay或WeChatPay,而是依赖Payment这个抽象:
def checkout(payment: Payment, amount): payment.pay(amount)这样以后要换成银行卡支付,只需要新增一个实现:
class BankCardPay(Payment): def pay(self, amount): print(f"银行卡支付 {amount}")原来的checkout不用改。
核心好处是:
- 降低耦合:业务代码不绑死某个具体类。
- 方便替换实现:支付宝、微信、银行卡都能切换。
- 方便测试:测试时可以传一个假的支付实现。
- 方便扩展:新增实现通常不需要改老代码
总之:面向接口编程,就是让代码依赖“它能做什么”,而不是依赖“它具体是谁”。