Web Log di Adrian Florea

"You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away." Antoine de Saint-Exupery
posts - 440, comments - 2715, trackbacks - 3944

My Links

Archives

Post Categories

Image Galleries

.RO Blogs

.RO People

.RO Sites

Blogs

Furls

Links

vinCitori

Design patterns nel Framework .NET - #12

Un esempio semplice d'implementazione del pattern TemplateMethod all'interno del Framework .NET è costituito dalla renderizzazione dei server control web:

// ...
namespace System.Web.UI.WebControls
{
  public class WebControl // ...
 
{
    protected override void Render(HtmlTextWriter writer)
    {
      RenderBeginTag(writer);
      RenderContents(writer);
      RenderEndTag(writer);
    }
 
    public virtual void RenderBeginTag(HtmlTextWriter writer)
    {
      // ...
   
}

    protected virtual void RenderContents(HtmlTextWriter writer)
    {
      // ...
   
}

    public virtual void RenderEndTag(HtmlTextWriter writer)
    {
      // ...
   
}

    // ...
 
}
}

I ruoli sono chiari:

  • la classe WebControl fa da AbstractClass (anche se non è abstract);
  • le classi che derivano da WebControl fanno da ConcreteClass;
  • il metodo Render fa da TemplateMethod;
  • i metodi RenderBeginTag, RenderContents e RenderEndTag fanno da PrimitiveOperation.

Perciò quando si deriva da WebControl, non si deve sovrascrivere Render (che in questo caso rappresenta l'algoritmo) ma RenderContents (e/o RenderBeginTag, RenderEndTag) cioè le operazioni (i passi dell'algoritmo).

L'album del giorno: Folco Orselli - La spina

Print | posted on domenica 27 febbraio 2005 23:58 | Filed Under [ Pattern Dappertutto ]

Powered by:
Powered By Subtext Powered By ASP.NET