在这种情况下使用接口或抽象类更好吗?

时间:2011-11-07 18:59:57

标签: php oop interface abstract

我想知道,如果我有购物(例如购物车付款流程)课程,我想增加通过paypal付款的可能性..最好使用abstract classDocs或{{ 3}},例如:

Shopping implements Visa,Paypal

我认为界面是正确的答案,因为Shopping类会被推荐为抽象类?

3 个答案:

答案 0 :(得分:7)

都不是。

Shopping(如果您说它的主系统,例如购物车)应该有一个实施/继承PaymentProcessor的提供商列表。 VisaPayPal将从PaymentProcessor实施/继承。

通过这种方式,您可以通过某些配置注入PaymentProcessor可用的内容。如果您添加Shopping,那么MasterCard就不会发生变化。

查看single responsibility principle

答案 1 :(得分:3)

根据你班级的名字,我猜你应该不使用。你应该看的模式称为组合。请参阅http://en.wikipedia.org/wiki/Object_composition

简而言之,您的购物类“使用”付款处理器,本身并不是一个(即不是“是一种”关系)

我会实现您的购物类,以便在实例化时或通过对象上的set方法接受付款处理器。

您可能还想阅读design patterns,特别是四人帮。

答案 2 :(得分:1)

没有,我会说。为每种付费方法设置一个Class会更好。我会使用一个抽象类Paying(或类似的)来实现所有付费方法使用的方面。然后你可以为每个方法编写一个接口(不是必需的)以及扩展Paying的每个方法的实际实现(并且可能实现Visa)。