public interface DrawAPI
{
void drawCircle(int radius, int x, int y);
}
public class RedCircle : DrawAPI {
public void drawCircle(int radius, int x, int y) {
Report.Info("There is a red circle by draw");
}
}
public class GreenCircle : DrawAPI {
public void drawCircle(int radius, int x, int y) {
Report.Info("There is a blue circle by draw");
}
}
public abstract class Shape {
protected DrawAPI drawAPI;
protected Shape(DrawAPI drawAPI){
this.drawAPI = drawAPI;
}
public abstract void draw();
}
public class Circle:Shape {
private int x, y, radius;
public Circle(int x, int y, int radius, DrawAPI drawAPI)
:base(drawAPI) {
this.x = x;
this.y = y;
this.radius = radius;
}
public override void draw(){
drawAPI.drawCircle(radius,x,y);
}
}
Shape redCircle = new Circle(20,20,5,new RedCircle()); Shape greenCircle = new Circle(20,20,5,new GreenCircle());
redCircle.draw();
greenCircle.draw();