Я новичок в Design Patterns, и я изо всех сил пытался понять, как я могу применить шаблоны Strategy, Decorator или Visitor к моей проблеме.
У меня есть диалог MVVM WPF, который используется для захвата информации документа Letter. Форма имеет следующее:
Я использовал 3 элемента управления пользователя для вышеперечисленных элементов, потому что для каждой записи фиксируется немного другая информация:
У меня есть один класс Contact, и каждая ViewModel захватывает немного другую информацию. Там, где он отличается, Recipients/CC имеют поведение "Несколько контактов", а Sender/CC имеют поведение "Favorite Contact".
В настоящее время моя логика дублируется, и я стараюсь сделать ее более удобной.
Когда я рассматривал шаблоны Strategy and Decorator, суперкласс содержал информацию о каждом поведении. Можно ли просто "добавить" поведение в конкретную реализацию, не добавляя суперкласс?
Вы можете "добавить" поведение к конкретному типу без наследования с использованием extension methods
, в зависимости от того, какой тип функциональности вам нужно добавить.
Например, скажем, у вас есть класс под названием MyConcreteClass
:
public class MyConcreteClass
{
public string PropertyOne { get; set; }
public void MethodOne { ... }
}
Затем вы можете создать отдельный класс расширений, который позволяет добавлять функциональные возможности без изменения исходной реализации.
namespace Extensions
{
public static class MyConcreteClassExtensions
{
public static string MethodTwo(this MyConcreteClass concreteClass)
{
// add new implementation here
return concreteClass.PropertyOne + " using extensions";
}
}
}
И тогда вы можете просто использовать следующее:
var c = new MyConcreteClass();
Console.WriteLine(c.MethodTwo());
Для получения дополнительной информации см. Здесь