• Предмет: Информатика
  • Автор: Kukuwka0Ha0DepeBe
  • Вопрос задан 3 месяца назад

С#
На каждый паттерн описать: Builder , Decorator
1. Проблема, которая возникает

2. Теоритическое решение этой проблемы

3. Описание паттерна и что им делается

4. Пример просто кода на С++/C#. .

Ответы

Ответ дал: eespay
1
Builder:

Проблема: Когда объект состоит из множества частей, и требуется создать различные варианты этого объекта, существует проблема сложного конструирования и настройки.
Теоретическое решение: Разделение процесса пошагового конструирования объекта от его представления, чтобы один и тот же процесс конструирования мог создавать различные представления объекта.
Описание паттерна: Паттерн Builder позволяет создавать сложные объекты шаг за шагом. Он абстрагирует процесс конструирования и позволяет различным объектам-строителям создавать различные представления конечного объекта.
Пример кода на C#:

// 1. Проблема: Конструирование сложного объекта
public class Product
{
private List parts = new List();

public void AddPart(string part)
{
parts.Add(part);
}

public void Show()
{
Console.WriteLine("\nProduct Parts:");
foreach (var part in parts)
Console.WriteLine(part);
}
}

// 2. Теоретическое решение: Использование интерфейса строителя
public interface IBuilder
{
void BuildPartA();
void BuildPartB();
Product GetResult();
}

// 3. Описание паттерна: Класс Director руководит процессом конструирования, используя интерфейс IBuilder
public class Director
{
public void Construct(IBuilder builder)
{
builder.BuildPartA();
builder.BuildPartB();
}
}

// Пример использования Builder
public class ConcreteBuilder : IBuilder
{
private Product product = new Product();

public void BuildPartA()
{
product.AddPart("PartA");
}

public void BuildPartB()
{
product.AddPart("PartB");
}

public Product GetResult()
{
return product;
}
}

Decorator:

Проблема: Необходимость динамического добавления нового поведения или состояния объекта без изменения его кода.
Теоретическое решение: Использование композиции вместо наследования для расширения функциональности объекта.
Описание паттерна: Паттерн Decorator позволяет добавлять новые обязанности (методы) объекту динамически, создавая набор вложенных декораторов, каждый из которых добавляет свою функциональность.
Пример кода на C#:

// 1. Проблема: Необходимость расширения функциональности объекта
public interface IComponent
{
void Operation();
}

// 2. Теоретическое решение: Использование декоратора для добавления новых обязанностей
public class ConcreteComponent : IComponent
{
public void Operation()
{
Console.WriteLine("ConcreteComponent Operation");
}
}

// 3. Описание паттерна: Декоратор добавляет новую функциональность к объекту
public abstract class Decorator : IComponent
{
protected IComponent component;

public Decorator(IComponent component)
{
this.component = component;
}

public virtual void Operation()
{
component.Operation();
}
}

// Пример использования Decorator
public class ConcreteDecoratorA : Decorator
{
public ConcreteDecoratorA(IComponent component) : base(component) { }

public override void Operation()
{
base.Operation();
AddedBehavior();
}

void AddedBehavior()
{
Console.WriteLine("ConcreteDecoratorA AddedBehavior");
}
}
Вас заинтересует