有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分 - 整体”的关系,使用户对单个对象和组合对象具有一致的访问性。
如商场售卖商品,需要计算售出商品总价。
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());
}
}
}