我不明白如何清楚地使用接口类。我阅读了很多关于接口类相关 OOP 的文章和教程,所以我知道接口是什么,但我确实了解在实际项目中使用。
例如,
我制作了 IPayment 接口类。我定义了 2 种使用所有支付类通用的方法。
public interface IPayment
{
void MakePayment(OrderInfo orderInfo);
void MakeRefund (OrderInfo orderInfo);
}
我做了 3 个支付类,分别是 CreditCardPayment、PaypalPayment 和 GooglePayment。
我在每个类中定义了 2 个方法。
我在这部分感到困惑,我需要创建 OrderInfo 类,其中包含需要用于处理付款或退款的订单信息。每个班级需要不同的信息。
CreditCartPayment 类需要 Credit Card No, Expiration Date .... 但其他支付类不需要。
GooglePayment 类需要 Google 订单号,而其他类则不需要。
所以,最后 OrderInfo 类必须有许多额外的字段。而且看起来很脏...
前任)
Public class OrderInfo
{
/* For Common */
string orderNo {get; set;}
string customerNo { get; set;}
decimal amount {get; set;}
/* For Credit Card */
string CCNum {get; set;}
string expDate { get; set;}
/* For Google */
string googleOrderID {get; set;}
...
/* For Paypal */
...
}
我的问题是,
在这种情况下,使用 IPayment 是否正确?或者我需要在没有接口类的情况下使用正确的参数定义每个类?
我想使用接口类的好处是以后很容易弄清楚支付类。因为接口类将显示每个支付类中定义了哪些方法。还有其他优点吗?
您对在现实世界中理解接口类有什么建议吗?
[编辑]
谢谢你的建议。
我再次编写示例代码。你能检查一下这段代码吗?
public interface IPayment
{
void MakePayment(OrderInfo orderInfo); // !!
void MakeRefund (OrderInfo orderInfo); // !!
}
public class OrderInfo
{
protected string OrderNo {get; set;}
protected string CustomerNo { get; set;}
protected decimal Amount {get; set;}
}
public class CreditCardPaymentInfo : OrderInfo
{
string CCNum {get; set;}
string ExpDate { get; set;}
}
public class GooglePaymentInfo : OrderInfo
{
string GoogleOrderID {get; set;}
}
public class PaypalPaymentInfo : OrderInfo
{
string PaypalID {get; set;}
}
public void MakePayment()
{
IPayment paymentModule;
// Get Order Info
if(orderType == "Paypal"){
paymentModule = new PaypalPayment();
PaypalPaymentInfo orderInfo = new PaypalPaymentInfo();
orderInfo.PaypalID = "TEST";
}else if(orderType == "Google"){
paymentModule = new GooglePayment();
GooglePaymentInfo orderInfo = new GooglePaymentInfo();
orderInfo.GoogleOrderID = "TEST";
}else{
paymentModule = new CreditCardPayment();
CreditCardPaymentInfo orderInfo = new CreditCardPaymentInfo();
orderInfo.CCNum = "1111111111111111";
orderInfo.ExpDate = "11/11";
}
orderInfo.OrderNo = "123";
orderInfo.CustomerNo = "ABC";
orderInfo.Amount = 12.20m;
paymentModule.MakePayment();
}
它发生错误:
错误 1 'com.WebUI.Models.CreditCardPaymentInfo' 没有实现接口成员 'com.WebUI.Models.IPaymentProcess.makeRefund(WebUI.Models.RefundModel)'
我想我需要修复接口类。有人知道我应该如何解决吗?