Шаблон Абстрактная фабрика
Разработать примитивный графический редактор для рисования на холстах различной формы кистями с пером той же формы, например, на круглом холсте - круглое перо (на оконной форме может быть несколько холстов, в каждом из которых используется собственное перо). Предусмотреть возможность использования нескольких видов холстов, например, круглого и прямоугольного.
Я написал это, но не знаю, как реализовать здесь создание холстов и кистей определенной формы.
//абстрактный класс - кисть
abstract class Brush
{
public abstract void Move();
}
// абстрактный класс холст
abstract class Canvas
{
public abstract void Draw();
}
// класс мазок круглой кистью
class RoundBrush : Brush
{
public override void Move()
{
// рисуем круглой кистью
}
}
// мазок квадратной кистью
class SquareBrush : Brush
{
public override void Move()
{
// Рисуем квадратной кистью
}
}
// создание круглого холста
class RoundForm : Canvas
{
public override void Draw()
{
// Рисуем круглый холст (pictureBox)
}
}
// создание квадратного холста
class SquareForm : Canvas
{
public override void Draw()
{
// Рисуем квадратный холст (pictureBox)
}
}
// класс абстрактной фабрики
abstract class EditorFactory
{
public abstract Brush CreateBrush();
public abstract Canvas CreateCanvas();
}
// Фабрика создания круглого холста с круглой кистью
class RoundFactory : EditorFactory
{
public override Brush CreateBrush()
{
return new RoundBrush();
}
public override Canvas CreateCanvas()
{
return new RoundForm();
}
}
// Фабрика создания квадратного холста с квадратной кистью
class SquareFactory : EditorFactory
{
public override Brush CreateBrush()
{
return new SquareBrush();
}
public override Canvas CreateCanvas()
{
return new SquareForm();
}
}
// клиент
class Editor
{
private Brush brush;
private Canvas canvas;
public Editor(EditorFactory factory)
{
brush = factory.CreateBrush();
canvas = factory.CreateCanvas();
}
public void Move()
{
brush.Move();
}
public void Draw()
{
canvas.Draw();
}
}
private void Form1_Shown(object sender, EventArgs e)
{
Editor newEditor = new Editor(new RoundFactory());
newEditor.Move();
newEditor.Draw();
Editor editor = new Editor(new SquareFactory());
editor.Move();
editor.Draw();
}