C# 删除装饰设计模式中装饰对象的某些选项
我有一些C#代码,如下所示,我想在添加后删除装饰对象,例如我有一杯加牛奶和糖的茶加饼干,我想从Order类中删除糖,如何使用装饰设计模式做到这一点:C# 删除装饰设计模式中装饰对象的某些选项,c#,design-patterns,decorator,C#,Design Patterns,Decorator,我有一些C#代码,如下所示,我想在添加后删除装饰对象,例如我有一杯加牛奶和糖的茶加饼干,我想从Order类中删除糖,如何使用装饰设计模式做到这一点: public abstract class Order { private int _Cost = 0; private string _Description = ""; public virtual int GetCost() { return _Cost; } public vi
public abstract class Order
{
private int _Cost = 0;
private string _Description = "";
public virtual int GetCost()
{
return _Cost;
}
public virtual string GetDescription()
{
return _Description;
}
}
public class Coffee : Order
{
int _Cost = 3000;
string _Description = "Coffee";
public override int GetCost()
{
return _Cost;
}
public override string GetDescription()
{
return _Description;
}
}
public class Tea : Order
{
int _Cost = 2000;
string _Description = "Tea";
public override int GetCost()
{
return _Cost;
}
public override string GetDescription()
{
return _Description;
}
}
public abstract class Options : Order
{
int _Cost = 0;
string _Description = "No Option";
public override int GetCost()
{
return _Cost;
}
public override string GetDescription()
{
return _Description;
}
}
public class Honey : Order
{
int _Cost = 800;
string _Description = "Honey";
public Honey(Order order)
{
_Cost = _Cost + order.GetCost();
_Description = order.GetDescription() + " And " + _Description;
}
public override int GetCost()
{
return _Cost;
}
public override string GetDescription()
{
return _Description;
}
}
public class Biscuit : Order
{
int _Cost = 400;
string _Description = "Biscuit";
public Biscuit(Order order)
{
_Cost = _Cost + order.GetCost();
_Description = order.GetDescription() + " And " + _Description;
}
public override int GetCost()
{
return _Cost;
}
public override string GetDescription()
{
return _Description;
}
}
public class Sugar : Order
{
int _Cost = 300;
string _Description = "Sugar";
public Sugar(Order order)
{
_Cost = _Cost + order.GetCost();
_Description = order.GetDescription() + " And " + _Description;
}
public override int GetCost()
{
return _Cost;
}
public override string GetDescription()
{
return _Description;
}
}
public class Milk : Order
{
int _Cost = 600;
string _Description = "Milk";
public Milk(Order order)
{
_Cost = _Cost + order.GetCost();
_Description = order.GetDescription() + " And " + _Description;
}
public override int GetCost()
{
return _Cost;
}
public override string GetDescription()
{
return _Description;
}
}
如果您能尽快回答我,我将不胜感激……您不能也不应该这样做。装饰者的目的是对他们的客户(包括其他装饰者)完全透明。此外,装饰师应按其意图用于(按照GoF的规定): 动态地将附加职责附加到对象 顺便说一句,我不认为你的
饼干
或茶
应该是订单的装饰者(并被视为订单)。创建包含项目列表的订单
。即使用聚合而不是继承。考虑服务员创建的订单:
- 加糖和柠檬的茶x 2
- 牛奶咖啡
- 饼干