Какие шаблоны проектирования GOF уже реализованы как первоклассные языковые функции в C #?


10

(Этот вопрос был закрыт из-за переполнения стека из-за того, что он «слишком широкий» и «не настоящий вопрос», так что, может быть, он более уместен здесь?)

Вдохновлен этим вопросом . Мы знаем, что события - это реализация шаблона Observer на уровне языка. Существуют ли другие шаблоны проектирования, реализованные как языковые функции в C #? Я хочу оставить этот вопрос специфичным для C #, потому что существует множество шаблонов проектирования, реализованных на других языках, и я хочу, чтобы это было сфокусировано.

Я не ищу реализации шаблонов в BCL (например, декоратор во многих классах WCF или метод Factory в WebClient), а шаблоны на уровне языка .

До сих пор я знаю о наблюдателе ( event) и итераторе ( foreachв сочетании со многими классами и интерфейсами BCL). Вероятно, есть и другие очевидные, которые мне не хватает.

Ответы:


1

Делегаты являются фактическими шаблонами стратегий


Забавно, только вчера коллега говорил, что делегаты - это реализация шаблона команд. Я полагаю, зависит от того, как вы на это смотрите (команда afaik должна также инкапсулировать аргументы, но в случае метода без аргументов ..)
stijn

1
Я бы не сказал, что делегаты - это реализация шаблонов команд, по крайней мере, я не понимаю, как можно реализовать такие вещи, как отмена / повтор, используя только делегатов. Они могут быть частью командного объекта, но это другое дело
Homde

0

Методы расширения являются абстракцией шаблона Decorator.


На самом деле, нет. Декоратор позволяет нам составлять объекты во время выполнения, чтобы добавлять данные и поведение.
Мартин Домс

1
Верно - поэтому они не так полезны, как настоящие шаблоны декораторов. Было бы лучше сказать, что многие проблемы, решаемые методами расширения, решаются с помощью шаблонов декораторов на других языках?
Встриен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.