Decorator Pattern - adding values dynamically

D

Doug

I am looking at using the decorator pattern to create a rudimentary
stored proc generator but am unsure about something. For each class
that identifies a part of the stored proc, what if I want to add a
value dynamically. I'm including some code to show what I mean. This
is real basic on what I want to do:

using System;

namespace ClassLibrary1
{
public interface Value
{
string GetValue();
}

public abstract class Decorator : Value
{
protected Value _nextValue;

public Decorator(Value theValue)
{
_nextValue = theValue;
}
public virtual string GetValue()
{
return _nextValue.GetValue();
}
}

public class Header : Value
{
private string _description = "*********************************";

public Header()
{}
public string GetValue()
{
return _description;
}
}

public class Name : Decorator
{
private string _description = "Name:";

public Name(Value component) : base (component)
{
}
public override string GetValue()
{
return _nextValue.GetValue() + "\r\n" + _description;
}
}

public class Date : Decorator
{
private string _description = "Date:";

public Date(Value component) : base (component)
{
}
public override string GetValue()
{
return _nextValue.GetValue() + "\r\n" + _description;
}
}

public class Developer : Decorator
{
private string _description = "Developer:";

public Developer(Value component) : base (component)
{
}
public override string GetValue()
{
return _nextValue.GetValue() + "\r\n" + _description;
}
}

}

I've tested this and called it like so:

ClassLibrary1.Value StoredProc = new ClassLibrary1.Developer(new
ClassLibrary1.Date(new ClassLibrary1.Name(new
ClassLibrary1.Header())));
MessageBox.Show(StoredProc.GetValue());

My question would be if I wanted to pass an actual name into the Name
class or a date into the Date class, etc. I'm assuming I do that in
the constructor of each class, but wouldn't that make calling each
class messy? Does that perhaps negate the using of the Decorator
pattern here?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top