С#
На каждый паттерн описать: 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");
}
}
Проблема: Когда объект состоит из множества частей, и требуется создать различные варианты этого объекта, существует проблема сложного конструирования и настройки.
Теоретическое решение: Разделение процесса пошагового конструирования объекта от его представления, чтобы один и тот же процесс конструирования мог создавать различные представления объекта.
Описание паттерна: Паттерн 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");
}
}
Новые вопросы
Физика,
1 год назад
Литература,
1 год назад
Математика,
1 год назад
Қазақ тiлi,
1 год назад
Математика,
6 лет назад
Английский язык,
6 лет назад