桥:
interface IRenderer
{
void RenderCircle(float radius);
}
class VectorRenderder : IRenderer
{
public void RenderCircle(float radius)
{
Console.WriteLine($"Draw circle of radius {radius}");
}
}
class RasterRenderer : IRenderer
{
public void RenderCircle(float radius)
{
Console.WriteLine($"Draw pixels for circle of radius {radius}");
}
}
abstract class Shape
{
protected IRenderer renderer;
protected Shape(IRenderer renderer)
{
this.renderer = renderer;
}
public abstract void Draw();
public abstract void Resize(float size);
}
class Circle : Shape
{
private float raduis;
public Circle(IRenderer renderer,float raduis):base(renderer)
{
this.raduis = raduis;
}
public override void Draw()
{
renderer.RenderCircle(raduis);
}
public override void Resize(float size)
{
raduis *= size;
}
}
class Program
{
static void Main(string[] args)
{
/**
Circle c = new Circle(new RasterRenderer(), 2);
c.Draw();
c.Resize(2);
c.Draw();
*/
var cb = new ContainerBuilder();
cb.RegisterType().As().SingleInstance();
cb.Register((c, p) =>
new Circle(c.Resolve(),
p.Positional<float>(0)
));
using (var c=cb.Build())
{
var circle = c.Resolve(new PositionalParameter(0, 5.0f));
circle.Draw();
circle.Resize(2);
circle.Draw();
}
}
}