CSharp: Composite Pattern in donet 6
/// <summary>
/// 组合模式 Composite Pattern 亦称: 对象树、Object Tree、Composite Pattern
/// </summary>
public abstract class Gift
{
/// <summary>
///
/// </summary>
protected readonly string _description;
/// <summary>
///
/// </summary>
protected decimal _price;
/// <summary>
///
/// </summary>
/// <param name="description"></param>
/// <param name="price"></param>
protected Gift(string description, decimal price)
{
_description = description;
_price = price;
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public abstract decimal CalculatePrice();
}
/// <summary>
/// 组合模式 Composite Pattern 亦称: 对象树、Object Tree、Composite Pattern
/// </summary>
public interface IGiftOperations
{
/// <summary>
///
/// </summary>
/// <param name="gift"></param>
void Add(Gift gift);
/// <summary>
///
/// </summary>
/// <param name="gift"></param>
void Remove(Gift gift);
}
/// <summary>
/// 组合模式 Composite Pattern 亦称: 对象树、Object Tree、Composite Pattern
/// </summary>
public class CompositeGift : Gift, IGiftOperations
{
/// <summary>
/// This collection can store simple as well as composite gifts.
/// </summary>
private readonly List<Gift> _gifts;
/// <summary>
///
/// </summary>
/// <param name="description"></param>
public CompositeGift(string description)
: base(description, 0)
{
_gifts = new List<Gift>();
}
/// <summary>
///
/// </summary>
/// <param name="gift"></param>
public void Add(Gift gift) =>
_gifts.Add(gift);
/// <summary>
///
/// </summary>
/// <param name="gift"></param>
public void Remove(Gift gift) =>
// Consider using HashSet or Dictionary if you need remove an item from a collection.
_gifts.Remove(gift);
/// <summary>
///
/// </summary>
/// <returns></returns>
public override decimal CalculatePrice()
{
Console.WriteLine($"'{_description}' 包含以下产品及价格:");
_price = _gifts.Sum(gift => gift.CalculatePrice());
return _price;
}
}
/// <summary>
/// 组合模式 Composite Pattern 亦称: 对象树、Object Tree、Composite Pattern
/// </summary>
public class SimpleGift : Gift
{
/// <summary>
///
/// </summary>
/// <param name="description"></param>
/// <param name="price"></param>
public SimpleGift(string description, decimal price)
: base(description, price)
{
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public override decimal CalculatePrice()
{
Console.WriteLine($"'{_description}' with the price of {_price:C}");
return _price;
}
}
/// <summary>
/// 组合模式 Composite Pattern 亦称: 对象树、Object Tree、Composite Pattern
/// </summary>
public static class GiftExecutor
{
/// <summary>
/// /
/// </summary>
public static void Execute()
{
ConsoleExtension.WriteSeparator("组合模式 Composite Pattern: Gift demo");
var smartWatchGift = new SimpleGift("智能手表 Smart watch", 200);
var smartWatchPrice = smartWatchGift.CalculatePrice();
Console.WriteLine($"智能手表礼品总价: {smartWatchPrice:C}");
Console.WriteLine();
var familyGift = new CompositeGift("家庭的礼物");
var dadsGift = new SimpleGift("钓鱼竿Fishing rod", 50);
var momsGift = new SimpleGift("项链Necklace", 80);
var childrenGift = new CompositeGift("孩子们的礼物Children gift");
childrenGift.Add(new SimpleGift("士兵玩具Soldier toy", 40));
childrenGift.Add(new SimpleGift("芭比玩具Barbie toy", 50));
familyGift.Add(dadsGift);
familyGift.Add(momsGift);
familyGift.Add(childrenGift);
var familyGiftPrice = familyGift.CalculatePrice();
Console.WriteLine($"家庭礼物总价: {familyGiftPrice:C}");
}
}
调用:、
Geovin.Du.DuComposite.DuGift.GiftExecutor.Execute();
Console.WriteLine();
输出:
组合模式 Composite Pattern: Gift demo -------------------------------------------------- '智能手表 Smart watch' with the price of ¥200.00 智能手表礼品总价: ¥200.00 '家庭的礼物' 包含以下产品及价格:: '钓鱼竿Fishing rod' with the price of ¥50.00 '项链Necklace' with the price of ¥80.00 '孩子们的礼物Children gift' 包含以下产品及价格:: '士兵玩具Soldier toy' with the price of ¥40.00 '芭比玩具Barbie toy' with the price of ¥50.00 家庭礼物总价: ¥220.00

哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号