//抽象类
public abstract class SinoPostIncept
{
protected int _weight;
protected decimal _price;
protected int _InceptType;
protected int _RationArea;
public SinoPostIncept(int weight,decimal price,int incept,int RationArea)
{
_weight = weight;
_price = price;
_InceptType = incept;
_RationArea = RationArea;
}
public abstract decimal getShippingFee();
public abstract decimal getServiceFee();
public virtual decimal getInsuranceFee()
{
return decimal.Round(_price*0.01M,1);
}
}
/// <summary>
/// 具体子类1
/// </summary>
public class CODIncept:SinoPostIncept
{
public CODIncept(int weight,decimal price,int incept,int RationArea)
:base(weight,price,incept,RationArea)
{
}
public override decimal getShippingFee()
{
switch(_RationArea)
{
case 1:
return 10 + 2 * Convert.ToInt32(_weight/500);
case 2:
return 15 + 5 * Convert.ToInt32(_weight/500);
default:
new Exception("error");
return -1;
}
}
public override decimal getServiceFee()
{
return decimal.Round(_price*0.01M,1);
}
}
/// <summary>
/// 具体子类2
/// </summary>
public class EMSIncept:SinoPostIncept
{
public EMSIncept(int weight,decimal price,int incept,int RationArea)
:base(weight,price,incept,RationArea)
{
}
public override decimal getShippingFee()
{
return decimal.Round(20 + (decimal)7.5 * Convert.ToInt32(_weight/500),1);
}
public override decimal getServiceFee()
{
return 10 + decimal.Round(_price * 0.02M,1);
}
}
/// <summary>
/// 具体子类3
/// </summary>
public class PostIncept:SinoPostIncept
{
public PostIncept(int weight,decimal price,int incept,int RationArea)
:base(weight,price,incept,RationArea)
{
}
public override decimal getShippingFee()
{
return 10;
}
public override decimal getServiceFee()
{
return 0;
}
public override decimal getInsuranceFee()
{
return 0;
}
}
//工厂方法类
public class SinoPostInceptFactory
{
public static SinoPostIncept Create(int weight,decimal price,int incept,int RationArea)
{
switch (incept)
{
case 1:
return new CODIncept(weight,price,incept,RationArea);
case 2:
return new EMSIncept(weight,price,incept,RationArea);
case 3:
return new PostIncept(weight,price,incept,RationArea);
default:
return new CODIncept(weight,price,incept,RationArea);
}
}
}
浙公网安备 33010602011771号