Шаблон Абстрактная фабрика

Разработать примитивный графический редактор для рисования на холстах различной формы кистями с пером той же формы, например, на круглом холсте - круглое перо (на оконной форме может быть несколько холстов, в каждом из которых используется собственное перо). Предусмотреть возможность использования нескольких видов холстов, например, круглого и прямоугольного.

Я написал это, но не знаю, как реализовать здесь создание холстов и кистей определенной формы.

//абстрактный класс - кисть
    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();
    }

Ответы (0 шт):