Oop 切换值以决定使用哪个子类
我有一个抽象类Payment,它由几个PaymentType实现Oop 切换值以决定使用哪个子类,oop,design-patterns,Oop,Design Patterns,我有一个抽象类Payment,它由几个PaymentType实现 public abstract class Payment { protected int contract; public Payment(int contract) { this.contract = contract; } public abstract bool Aprove(); } 然后,
public abstract class Payment
{
protected int contract;
public Payment(int contract)
{
this.contract = contract;
}
public abstract bool Aprove();
}
然后,两个实现它的类
public class PaymentA : Payment
{
public PaymentA(int contract) : base(contract)
{
this.contract = contract;
}
public override bool Aprove()
{
return true;
}
}
public class PaymentB : Payment
{
public PaymentB(int contract) : base(contract)
{
this.contract = contract;
}
public override bool Aprove()
{
return true;
}
}
现在,我需要根据表单字段创建PaymentA或PaymentB
static void Main(string[] Args)
{
int contract = 1;
Payment payment;
switch (rbtPaymentType)
{
case (int)EPaymentTypes.A:
payment = new PaymentA(contract);
break;
case (int)EPaymentTypes.B:
payment = new PaymentB(contract);
break;
}
payment.Aprove(); //Use of unassigned local variable
}
我有两个问题:
1-它是否构造良好,以便我可以调用payment.Aprove(),无论它是哪种类型的付款
2-如果对象未初始化,如何进行方法调用?我得到错误“使用未分配的局部变量”
提前谢谢
1-它是否构造良好,以便我可以调用payment.Aprove(),无论它是哪种类型的付款
是的,对于简单的应用它是可以的。如果您想让它更好一点,可以使用简单的工厂,如:
public class PaymentFactory
{
public Payment CreatePayment(int rbtPaymentType, int contract)
{
switch (rbtPaymentType)
{
case (int)EPaymentTypes.A:
return new PaymentA(contract);
case (int)EPaymentTypes.B:
return new PaymentB(contract);
default:
throw new Exception("Unknown payment type");
}
}
}
class Program
{
static void Main(string[] Args)
{
int contract = 1;
Payment payment = null;
int rbtPaymentType = 1;
PaymentFactory paymentFactory = new PaymentFactory();
payment = paymentFactory.CreatePayment(rbtPaymentType, contract);
payment.Aprove();
}
}
无论何时切换某个对象以创建新实例,都应该考虑将其封装在factory中。这样,如果您想创建另一个支付实例,就不必在其他位置重复相同的切换
2-如果对象未初始化,如何进行方法调用?我得到错误“使用未分配的局部变量”
您可以将其分配给null,如上面的示例所示
顺便说一句,您不必在PaymentA和PaymentB的构造函数中指定合同成员,因为基类会为您指定