Visti i feedback abbastanza buoni :-) della serie di quiz su C#, ho pensato ad aprirne un'altra, forse più difficile, su design patterns. L'ho chiamata Patty Quiz per toglierle un po' di occhiaie e non per ultimo, perché mi piace tanto Patty Pravo :-)
Il codice qui sotto vuole calcolare il numero delle foglie (nodi senza figli) del grafo orientato determinato dal nodo di partenza root:
using System;
using System.Collections;
interface Component
{
void Add(Component c);
int Count{get;}
}
class Composite: Component
{
private ArrayList _children = new ArrayList();
public void Add(Component c)
{
_children.Add(c);
}
public int Count
{
get
{
int count = 0;
foreach(Component c in _children)
{
count += c.Count;
}
return count;
}
}
}
class Leaf: Component
{
public void Add(Component c)
{
throw new NotSupportedException("Le foglie non hanno figli");
}
public int Count
{
get
{
return 1;
}
}
}
public class Client
{
public static void Main()
{
Composite root = new Composite();
Composite comp = new Composite();
Leaf l1 = new Leaf();
Leaf l2 = new Leaf();
comp.Add(l1);
comp.Add(l2);
root.Add(l1);
root.Add(comp);
Console.WriteLine("Numero delle foglie: {0}", root.Count);
Console.Read();
}
}
Avete riconosciuto sicuramente il pattern Composite però, il numero delle foglie è sbagliato: 3 anziché 2. Per correggere questo codice, che pattern tra i seguenti 3 utilizzereste?
- A. Iterator
- B. Builder
- C. Visitor
L'idea di questo primo post mi è venuta leggendo il capitolo 5 del libro "Design Patterns in C#" di Steven John Metsker.