我想知道,如果我有购物(例如购物车付款流程)课程,我想增加通过paypal付款的可能性..最好使用abstract classDocs或{{ 3}},例如:
Shopping implements Visa,Paypal
我认为界面是正确的答案,因为Shopping
类会被推荐为抽象类?
答案 0 :(得分:7)
都不是。
Shopping
(如果您说它的主系统,例如购物车)应该有一个实施/继承PaymentProcessor
的提供商列表。 Visa
和PayPal
将从PaymentProcessor
实施/继承。
通过这种方式,您可以通过某些配置注入PaymentProcessor
可用的内容。如果您添加Shopping
,那么MasterCard
就不会发生变化。
答案 1 :(得分:3)
根据你班级的名字,我猜你应该不使用。你应该看的模式称为组合。请参阅http://en.wikipedia.org/wiki/Object_composition。
简而言之,您的购物类“使用”付款处理器,本身并不是一个(即不是“是一种”关系)
我会实现您的购物类,以便在实例化时或通过对象上的set方法接受付款处理器。
您可能还想阅读design patterns,特别是四人帮。
答案 2 :(得分:1)
没有,我会说。为每种付费方法设置一个Class会更好。我会使用一个抽象类Paying
(或类似的)来实现所有付费方法使用的方面。然后你可以为每个方法编写一个接口(不是必需的)以及扩展Paying
的每个方法的实际实现(并且可能实现Visa
)。