class Grapher {
private DrawDelegate _drawDelegate = null;
public delegate void DrawDelegate();
public Grapher() {}
public Grapher(DrawDelegate drawDelegate) { _drawDelegate = drawDelegate; }
public void drawShape() { if (_drawDelegate != null) _drawDelegate(); }
public void setShape(DrawDelegate drawDelegate) { _drawDelegate = drawDelegate; }
}
class Triangle { public static void draw() { Console.WriteLine("Draw Triangle"); } }
class Circle { public static void draw() { Console.WriteLine("Draw Circle"); } }
class Square { public static void draw() { Console.WriteLine("Draw Square"); } }
class Program {
public static void Main() {
Grapher grapher = new Grapher(Square.draw);
grapher.drawShape();
grapher.setShape(Circle.draw);
grapher.drawShape();
}
}
Draw Square
Draw Circle
Delegate 是 C# 對函數指標與觀察者模式的語言級實現,天然適合 Strategy Pattern。GoF 也展示 Template Method 實現 Strategy。