一、应用场景
奶茶店里售卖不同饮料,搭配不同配料。
如果想要一杯奶茶,加两份布丁,加一份珍珠。
二、装饰器模式定义
动态的给一个对象添加一些额外的职责,就增加功能来说比添加子类更加灵活。
有效的把类的核心职责和装饰功能分开解耦了。

示例代码:
public abstract class YinLiao
{
public abstract double Cost();
}
public class MilkTea : YinLiao
{
public override double Cost()
{
Console.WriteLine("奶茶10一杯");
return 10;
}
}
public class FruitTea : YinLiao
{
public override double Cost()
{
Console.WriteLine("果茶20一杯");
return 10;
}
}
public class SudaTea : YinLiao
{
public override double Cost()
{
Console.WriteLine("苏打饮料20一杯");
return 10;
}
}
//Decorater类
public abstract class Decorater:YinLiao
{
//添加父类的引用
private YinLiao Yinglaio;
//通过set方法,给他赋值
public void SetComponent(YinLiao yinglaio)
{
this.Yinglaio = yinglaio;
}
public override double Cost()
{
return this.Yinglaio.Cost();
}
}
public class Buding:Decorater
{
private static double money = 5;
public override double Cost()
{
Console.WriteLine("布丁5块");
return base.Cost()+money;
}
}
public class XianCao : Decorater
{
private static double money = 6;
public override double Cost()
{
Console.WriteLine("仙草6块");
return base.Cost() + money;
}
}
public class Zhenzhu : Decorater
{
private static double money = 7;
public override double Cost()
{
Console.WriteLine("珍珠5块");
return base.Cost() + money;
}
} MilkTea milkTea = new MilkTea();
Buding buding1 = new Buding();
Buding buding2= new Buding();
Zhenzhu zhenzhu = new Zhenzhu();
buding1.SetComponent(milkTea);
buding2.SetComponent(buding1);
zhenzhu.SetComponent(buding2);
Console.WriteLine(zhenzhu.Cost());原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。