Для понимания паттернов необходимо правильно читать UML диаграммы, и тогда не будет проблем в их понимании. Возьмем за основу реализации паттернов тему кондитерской.
Наследование
namespace Наследование
{
class Employee
{
public int Salary { get; set; }
}
class Сonfectioner:Employee
{
public string Education { get; set; }
}
}

Наследование отображается стрелой, с прозрачным наконечником, эти моменты надо запомнить, они вам в дальнейшем помогут более проще разбираться в диаграммах и паттернах. Как мы видим у нас происходит наследования от класса Сотрудники классом Кондитера.
Реализация
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, или мог быть его аналог интерфейса.