例如我有
货币(Currency)
和交换(Exchange)
,涉及到各种关于货币(Currency)
的实现。我想为某些货币添加额外汇率时,可以这样做:interface Currency { double rate();}
interface Exchange { double convert(Currency currency, double money); }
class PrivateBank implements Exchange {
@Override
public double convert(Currency currency, double money) {
double extra_rate = 1.0;
if (currency instanceof CanadaDollar) { /// ?
extra_rate = 1.05;
}
return money * currency.rate() * extra_rate;
}
}
这里是否违反了LSP原则?
CanadaDollar
类耦合在一起。如果我添加另一个实现,恰好也是 CAD,那么我无法告诉PrivateBank
以相同的方式处理我的新实现。 - andreossCanadaDollar
是Currency
的实现,则不违反LSP,但是您需要使用任何新货币或汇率更改更新PrivateBank
。更好的解决方案是将extra_rate
抽象成Currency
,以便每种货币都负责其相应的汇率。 - Daly