Введение в паттерны на C#

Для понимания паттернов необходимо правильно читать UML диаграммы, и тогда не будет проблем в их понимании. Возьмем за основу реализации паттернов тему кондитерской.

Наследование

namespace Наследование
{
    class Employee
    {
        public int Salary { get; set; }
    }

    class Сonfectioner:Employee
    {
         public string Education { get; set; }
    }

}
UML Диаграмма наследование

Наследование отображается стрелой, с прозрачным наконечником, эти моменты надо запомнить, они вам в дальнейшем помогут более проще разбираться в диаграммах и паттернах. Как мы видим у нас происходит наследования от класса Сотрудники классом Кондитера.

Реализация

 interface IWork
    {
        void DoJob();
    }


    class Сonfectioner: IWork
    {
         public string Education { get; set; }

        public void DoJob()
        {
            throw new NotImplementedException();
        }
    }

Хотя в последних версиях VS обозначения реализации интерфейса выглядит иначе, но в книгах и статьях она схематично изображена в виде пунктирной линии.

Ассоциация

 class Employee 
    {
        public int Salary { get; set; }
    }

    class Сonfectioner
    {

        public Employee Employee { get; set; }

        public string Education { get; set; }

        public void DoJob()
        {
            Console.WriteLine("Делаю торты");
        }
    }

В данном примере мы видим, как объект Confectioner содержится и используется другой объект Employee. На схеме ассоциация отображается обычной стрелкой.

Композиция

 public class Employee 
    {
        public int Salary { get; set; }
    }

    class Сonfectioner
    {
        Employee employee;
        public Сonfectioner()
        {
            employee = new Employee();
        }

        public string Education { get; set; }

        public void DoJob()
        {
            Console.WriteLine("Делаю торты");
        }
    }

Как мы видим связь в композиции обозначается стрелкой от главного класса к зависимому, на главном стрелка начинается с закрашенного ромбика. Рассмотрев код класса Confectioner который обладает классом Employee, внутри себя. Причем если мы удалим объект Confectioner то мы потеряем и объект Employee.

Агрегация

 abstract class People {}

    class Сonfectioner
    {
        People people;
        public Сonfectioner(People people)
        {
            this.people = people;
        }

        public string Education { get; set; }

        public void DoJob()
        {
            Console.WriteLine("Делаю торты");
        }
    }

На схеме мы видимо похожую UML диаграмму, за исключением того, что ромбик не заштрихован. По коду у нас реализована слабая связь, а в качестве связи класса Confectioner используется абстрактный класс People, или мог быть его аналог интерфейса.

Обновлено: 27.12.2021 — 21:08

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.