假设我们的在线商店有一个简单的支付功能。我们希望使用不同的交易处理器来管理不同的交易:
- 交易可以是付款或退款。
- 交易处理器可以是 Paypal 或 Payplug。
所以我们有以下课程:
class PaymentTransaction implements Transaction {
}
class RefundTransaction implements Transaction {
}
class PaypalProcessor implements Processor {
}
class PayplugProcessor implements Processor {
}
怎样才能更好地理解OOP呢?
-
Processor.process(transaction);
or
Transaction.process(processor);
例如,如果我们以示例1为例,如何避免以下情况switch
陈述?
class PaypalProcessor {
function process(Transaction transaction) {
switch(transaction.getType()) {
case payment:
//..
break;
case refund:
//..
}
}
在所有情况下,如何管理“嵌套”多态性、策略或其他东西,以便能够管理不同处理器的不同事务?
PS:如果标题不合适,请告诉我,我会编辑它。
你似乎走在正确的轨道上。您需要的是用于执行操作的第三个类(为了讨论,Java 中的示例代码):
class PaymentProcessor {
private Processor processor;
private Transaction transaction;
public PaymentProcessor(Processor processor, Transaction transaction) {
this.processor = processor;
this.transaction = transaction;
}
public void processPayment() {
processor.process(transaction);
}
}
那么你可以inject适当实施Processor
and Transaction
进入PaymentProcessor
:
PaymentProcessor paymentProcessor = new PaymentProcessor(new PayPalDepositProcess(),new PaypalDepositTransaction());
PaymentProcessor refundProcessor = new PaymentProcessor(new PayPalRefundProcess(),new PayPalRefundTransaction());
注意你的样子PaymentProcessor
可以传递 a 的不同组合处理器 and 交易无需有switch陈述。
注意processor.process(transaction);
听起来比更直观transaction.process(processor)
。另请注意,您可以考虑使用抽象工厂此处的模式,因为您似乎正在创建一系列相关对象(处理不同类型事务的不同类型的处理器)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)