无题

博客园 首页 新随笔 联系 订阅 管理

//抽象类
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);
   }

  }
 }

posted on 2004-07-02 15:07  Szx  阅读(604)  评论(0)    收藏  举报