Design Pattern 3-Composite

博客展示了一段C#代码,实现了合成模式。定义了抽象类Equipment及其子类eq1、eq2,还有继承自Equipment的CompositeEquipment类。CompositeEquipment类可添加、移除设备,能计算设备的实价和折扣价,最后进行了实例化和价格计算输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值