C#
/**//*
(C) OOMusou 2007 http://oomusou.cnblogs.com
Filename : DP_AdpaterPattern_Strategy_Object.cs
Compiler : Visual Studio 2005 / Visual C# 2.0
Description : Demo how to use Strategy Pattern with Adapter Pattern (Object)
Release : 07/11/2007 1.0
*/
using System;
interface IDrawStrategy {
void draw();
}
class Grapher {
protected IDrawStrategy _drawStrategy = null;
public Grapher() {}
public Grapher(IDrawStrategy drawStrategy) {
_drawStrategy = drawStrategy;
}
public void drawShape() {
if (_drawStrategy != null)
_drawStrategy.draw();
}
public void setShape(IDrawStrategy drawStrategy) {
_drawStrategy = drawStrategy;
}
};
interface IPaint {
void paint();
}
class Triangle : IPaint {
public void paint() {
Console.WriteLine("Draw Triangle");
}
}
class Circle : IPaint {
public void paint() {
Console.WriteLine("Draw Circle");
}
}
class Square : IPaint {
public void paint() {
Console.WriteLine("Draw Square");
}
};
class DrawAdapter : IDrawStrategy {
protected IPaint _adaptee = null;
public DrawAdapter() {}
public DrawAdapter(IPaint adaptee) {
_adaptee = adaptee;
}
public void draw() {
_adaptee.paint();
}
}
class ClIEnt {
static void Main() {
Grapher grapher = new Grapher(new DrawAdapter(new Triangle()));
grapher.drawShape();
grapher.setShape(new DrawAdapter(new Circle()));
grapher.drawShape();
grapher.setShape(new DrawAdapter(new Square()));
grapher.drawShape();
}
}