支付服务既能调用支付宝,也能调用银行卡。若业务函数依赖具体类型,每增加一种支付方式就要修改调用者;接口让调用者只要求“能支付”。
type Payer interface {
Pay(orderID string, cents int64) error
}
func Checkout(p Payer, orderID string, cents int64) error {
return p.Pay(orderID, cents)
}
Go 使用隐式实现:具体类型只要拥有接口要求的方法,就实现接口,不需要写 implements。这降低耦合,但是否实现由方法集精确决定。