我不是很清楚如何使用接口类。我读了很多关于面向对象编程中接口类的文章和教程,所以我知道接口是什么,但我不太理解在实际项目中的应用。
例如,我创建了一个名为IPayment的接口类,并定义了两种通用支付类方法。
public interface IPayment
{
void MakePayment(OrderInfo orderInfo);
void MakeRefund (OrderInfo orderInfo);
}
我创建了3个付款类,分别是CreditCardPayment、PaypalPayment和GooglePayment。
每个类中都定义了2个方法。
在这部分中,我感到困惑,我需要创建一个OrderInfo类,其中包含需要用于处理付款或退款的订单信息。而每个类需要不同的信息。
CreditCartPayment类需要信用卡号、过期日期等信息,但其他付款类不需要。
而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)'
我认为需要修复接口类。有人知道如何修复吗?
{get; set;}
是区分C#和Java的简单方法--Java根本没有属性,更不用说自动属性了。 - cHaoIPayment
实现,这些实现需要从OrderInfo
中获取不同的信息。 - Dan J