Design Pattern 3-Composite

using System;

namespace Pattern
{
 /// <summary>
 /// Summary description for Class1.
 /// </summary>
 public class CompositeEquipment:Equipment
 {
  System.Collections.ArrayList list=new System.Collections.ArrayList();
  public CompositeEquipment (string name) :base(name)
  {
   //
   // TODO: Add constructor logic here
   //
  }
  public bool add(Equipment equipment)
  {
   list.Add(equipment);
   return base.add(equipment);
  }
  public bool remove(Equipment equipment)
  {
   list.Remove (equipment);
   return base.remove(equipment);
  }
  public override double discountPrice()
  {
   double res=0;
   foreach(Equipment e in list)
   {
               res+=e.discountPrice();
   }
   return res;
  }
  public override double netPrice()
  {
   double res=0;
   foreach(Equipment e in list)
   {
    res+=e.netPrice();
   }
   return res;
  }


 }

 public abstract class Equipment
 {
  private string name;   //实价 
  public abstract double netPrice();  //折扣价格 
  public abstract double discountPrice();  //增加部件方法  
  public bool add(Equipment equipment) { return false; }  //删除部件方法
  public bool remove(Equipment equipment) { return false; }  //注意这里,这里就提供一种用于访问组合体类的部件方法。  
  
  public Equipment( string name) { this.name=name; }
  public string getName(){return this.name;}
 }

 public class eq1:Equipment
 {
  public eq1(string name) :base(name)
  {
  }
  public override double discountPrice()
  {
  
   return 80;
  }
  public override double netPrice()
  {
   
   return 100;
  }

 }

 public class eq2:Equipment
 {
  public eq2(string name) :base(name)
  {
  }
  public override double discountPrice()
  {
  
   return 800;
  }
  public override double netPrice()
  {
   
   return 1000;
  }

 }

}

    //合成模式 
   Equipment e1=new eq1("eq1");
 Equipment e2=new eq2("eq2");
  CompositeEquipment s=new CompositeEquipment("s");
   s.add(e1);
   s.add(e2);
  Console.WriteLine(s.netPrice().ToString());
  Console.WriteLine(s.discountPrice ().ToString());
      Console.WriteLine(s.getName());
  Console.WriteLine(e1.getName());
  Console.WriteLine(e2.getName());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值