Mam sobie taki diagram z wikipedii:
a to jest moja implementacja:
namespace DecoratorPattern
{
abstract class Component
{
public virtual void ComponentMessage()
{
Console.WriteLine("Call from Component base class.");
}
}
class ConcreteComponent : Component
{
public override void ComponentMessage()
{
//base.ComponentMessage();
Console.WriteLine("Call from ConcreteComponent!");
}
}
abstract class Decorator : Component
{
public abstract override void ComponentMessage();
}
class ConcreteDecorator : Decorator
{
private Component _component;
public ConcreteDecorator(Component component)
{
_component = component;
}
public override void ComponentMessage()
{
//throw new NotImplementedException();
_component.ComponentMessage();
Console.WriteLine("I expanded Component thanks for Decorator!");
}
}
class Program
{
static void Main(string[] args)
{
Component c = new ConcreteComponent();
c.ComponentMessage();
if (c is Component)
Console.WriteLine("true");
c = new ConcreteDecorator(c);
c.ComponentMessage();
if (c is Decorator)
Console.WriteLine("true");
else
Console.WriteLine("false");
Console.ReadLine();
}
}
}
czy coś z nią jest nie tak (co?)?
Druga sprawa to czy dla rozszerzenia funkcjonalności obiektu powinno się robić nowy obiekt czy po prostu rozszerzać już istniejący?
PS. Co oznacza "**-**component" na tym diagramie (zwróćcie uwagę na ten myślnik)?