Какие C # встроенные шаблоны проектирования? - PullRequest
20 голосов
/ 28 октября 2010

Какие шаблоны проектирования встроены в C # независимо от версии фреймворка?Я имею в виду такие шаблоны, как шаблон Observer, который можно найти в интерфейсе IObservable.ObservableCollection, INotifyPropertyChanged и т. Д.

Пожалуйста, укажите пространство имен шаблона в ваших ответах!

Ответы [ 8 ]

25 голосов
/ 28 октября 2010

Action<T> (обычно используется в качестве шаблона посетителя)

Откройте шаблоны проектирования, которые вы уже используете в .NET Framework (MSDN Magazine)

Пример

public class Root
{
    //Private and not exposed in a IList property = Encapsulation
    private List<Node> _nodes = new List<Node>(); 

    public void Visit(Action<Node> visitor)
    {
        // Controlled enumeration, can for instance handle exceptions in here.
        foreach (var item in _nodes)
        {
            visitor(node);
        }
    }
}

// usage
root.Visit(node => Console.WriteLine(node));
8 голосов
/ 05 марта 2015

Шаблоны создания

Абстрактная фабрика

  • System.Data.Common.DbProviderFactory

Builder

  • System.Text.StringBuilder
  • System.Data.Common.DbConnectionStringBuilder

Заводской метод

  • System.Activator
  • System.Net.WebRequest

Прототип

  • System.ICloneable

Singleton

  • System.StringComparer.InvariantCulture
  • System.StringComparer.InvariantCultureIgnoreCase

Структурные шаблоны

Адаптер

  • System.IO.StreamReader

Мост

  • System.Globalization.CultureInfo

Composite

  • System.ComponentModel.IComponent

Декоратор

  • System.IO.Stream

Фасад

  • System.Environment
  • System.String

Flyweight

  • System.StringComparer

Proxy

  • System.Net.WebClient
  • System.Runtime.Remoting.Proxies.RealProxy
  • System.ServiceModel.ICommunicationObject

Поведенческие модели

Цепочка ответственности

  • Microsoft.Practices.EnterpriseLibrary.Logging.Logger

Команда

  • System.Windows.RoutedEventArgs

Интерпретатор

  • System.IFormatProvider
  • System.Text.RegularExpressions.Regex

Итератор

  • System.Collections.IEnumerable
  • System.Data.IDataReader

Посредник

  • System.Threading.Timer

Memento

  • System.Runtime.Serialization.ISerializable

Наблюдатель

  • System.EventHandler
  • System.IObservable

Состояние

  • ??

Стратегия

  • System.Collections.Generic.IComparer

Шаблонный метод

  • System.Web.UI.Page

Посетитель

  • System.Linq.Expressions.ExpressionVisitor
5 голосов
/ 28 октября 2010

Итератор один (все классы коллекций и массивы могут использовать оператор foreach для итерации).

Другой - это шаблон наблюдателя - в значительной степени это и есть события.В 4.0 были добавлены IObservable и ObservableCollection.

4 голосов
/ 28 октября 2010

StringBuilder использует шаблон проектирования компоновщика.
И существует класс DbDataAdapter (шаблон адаптера).
Шаблон Null Object также широко используется.

3 голосов
/ 28 октября 2010

Шаблон наблюдателя. Все наши события и делегаты поднимаются по схеме наблюдателя.

Заводской шаблон. Строки подключения и поставщики БД с завода.

Шаблон итератора: Ienumerable, Ienumerators в наших операторах foreach

Адаптер: коммуникация COM. Callable Wrappers (RCW) во время выполнения

Шаблон: используется в нескольких местах esp в классах ASP.NET, где вы можете переопределить, чтобы обеспечить новую реализацию

Прокси: для всех наших звонков через веб-сервис. в c # 3.0 мы также получили коллекции прокси.

Там может быть гораздо больше. Но это те, которые пришли мне в голову

3 голосов
/ 28 октября 2010

Абстрактная фабрика: System.Data.Common.DbProviderFactory

0 голосов
/ 28 октября 2010

Шаблон прокси используется часто.

0 голосов
/ 28 октября 2010

Шаблон делегирования (для этого нужны делегаты и выражения)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...