组合模式

本文介绍了如何使用部分-整体模式(CompositePattern)在C#编程中创建一个树状结构,通过接口和继承实现商品价格的组合计算。实例展示了如何使用`PriceGroup`来组合不同类型的`IPrice`(如`Oppo`,`Vivo`,`IPhone`)对象,以计算售出商品的总价。
摘要由CSDN通过智能技术生成

有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分 - 整体”的关系,使用户对单个对象和组合对象具有一致的访问性。


如商场售卖商品,需要计算售出商品总价。

namespace ConsoleApp1
{
	// 定义价格接口
	public interface IPrice
	{
		float getPrice();
	}

	// 实现接口可扩展, 枝干
	public class PriceGroup : IPrice
	{
		List<IPrice> prices = new List<IPrice>();
		public void addPrice(IPrice price) {
			prices.Add(price);
		}

		public float getPrice()
		{
			float totalPrice = 0;
			foreach (IPrice price in prices) {
				totalPrice += price.getPrice();
			}
			return totalPrice;
		}
	}

	// 实现接口可扩展, 叶子
	public class Oppo : IPrice
	{
		int number;
		float price;
		public Oppo(int number, float price)
		{
			this.number = number;
			this.price = price;
		}

		public float getPrice()
		{
			return (number * price);
		}
	}

	public class Vivo : IPrice
	{
		int number;
		float price;
		public Vivo(int number, float price)
		{
			this.number = number;
			this.price = price;
		}

		public float getPrice()
		{
			return (number * price);
		}
	}

	public class IPhone : IPrice
	{
		int number;
		float price;
		public IPhone(int number, float price)
		{
			this.number = number;
			this.price = price;
		}

		public float getPrice()
		{
			return (number * price);
		}
	}

	class Program
    {
		static void Main(string[] args)
        {
			//第一天卖出
			Vivo vivo1 = new Vivo(5, 2000);
			Oppo oppo1 = new Oppo(6, 3000);
			PriceGroup group1 = new PriceGroup();
			group1.addPrice(vivo1);
			group1.addPrice(oppo1);
			Console.WriteLine("第一天:" + group1.getPrice());

			//第二天卖出
			Vivo vivo2 = new Vivo(10, 2000);
			Oppo oppo2 = new Oppo(3, 3000);
			IPhone iphone = new IPhone(3, 5000);
			PriceGroup group2 = new PriceGroup();
			group2.addPrice(vivo2);
			group2.addPrice(oppo2);
			group2.addPrice(iphone);
			Console.WriteLine("第二天:" + group2.getPrice());

			//两天总卖出
			PriceGroup group = new PriceGroup();
			group.addPrice(group1);
			group.addPrice(group2);
			Console.WriteLine("两天总:" + group.getPrice());
		}
    }
}

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值