2015-04-29 5 views
0

Я изучаю шаблон дизайна, и у меня есть вопрос.

Например, вот первый дизайн.
Форма
Shape-> Красный круг
Shape-> Синий круг
Shape-> Красная площадь
Shape-> Blue Square
...

Второй дизайн
Форма
Форма -> Circle
Форма-> Квадрат
Форма-> Круг-> Красный круг
Shape-> Circle-> Синий круг
Shape-> Square-> Красная площадь
Shape-> Square-> BlueSquare
...
Как выбрать шаблон дизайна

Благодаря Тони, я подхожу с ситуацией. В первом дизайне класс Shape является абстрактным, и теперь у меня есть функция только для «Красной площади» и «Синего квадрата». Это означает, что я не могу определить функцию в классе Shape, но мне нужно сделать это один за другим на «Красной площади» и «Синем квадрате». В той же ситуации для второго дизайна я могу поместить новую функцию в класс «Квадрат».
Теперь, мой вопрос, я прав, и есть ли какой-либо другой дизайн, который я могу использовать?

+2

Информации о вас недостаточно. Трудно понять контекст или цель объектов. IShape -> Аннотация Круг/Квадрат -> Бетон Красный/Синий Круг/Квадрат. Может быть одна настройка. Это позволит вам проходить любую фигуру вокруг, иметь общие реализации в вашей абстрактной модели и отдельные реализации на ваших бетонах. Но, не зная цели и ожидаемой функциональности, мы могли бы найти множество вариаций. Возможно, отредактируйте вопрос, чтобы быть более конкретным. – Tony

+0

Да, я знаю, что будет много вариантов, так что вы можете выбрать только одну ситуацию, которая хороша для использования в первом дизайне и ситуации, которая хороша для использования второго дизайна?Поскольку я недавно изучаю шаблон дизайна, и я читал из книги, что в нормальной ситуации я должен избегать слишком много уровней во время проектирования классов, но я не уверен в причине, и я не могу снова найти этот параграф. \ – sflee

+1

Сокращение числа ненужные уровни абстракций правильны, но все зависит от того, чего вы пытаетесь достичь. Проверьте этот сайт на http://www.dofactory.com/net/design-patterns, у них есть хорошие объяснения и примеры. Также ознакомьтесь с книгой «Head First Design Patterns», которая помогает понять шаблоны. Самый важный совет, который я могу дать вам о шаблонах, - это «Не заставляйте шаблон, если он не подходит». Имейте представление о том, чего вы пытаетесь достичь, тогда вы можете перейти на сайт doFactory и посмотреть, есть ли образец, который поможет достичь вашей цели. – Tony

ответ

1

Ваш вопрос не достаточно конкретный, чтобы дать солидный ответ. После обсуждения в комментариях ясно, что вы активно пытаетесь изучать шаблоны проектирования, поэтому вам может быть непонятно, как лучше всего задать вопрос. Я предоставляю это как ответ, поэтому у меня есть место для ввода.

Ресурсы

dofactory - я использую это как мой эталонный источник при поиске по шаблону, который соответствует моей потребности.

Head First Design Patterns - Я использовал эту книгу, чтобы получить хорошее представление о шаблонах дизайна и способах их использования. Учебные шаблоны проектирования были ключевым моментом для моего понимания развития. Он показывает вам, как по-настоящему использовать интерфейсы и абстракции для достижения общих проблем в разработке программного обеспечения.

Beginner Guide to Design Patterns - Хорошая статья, чтобы вы начали с шаблонов дизайна.

Javascript Design Patterns - (BONUS) Этот сайт был невероятным для изучения шаблонов дизайна javascript. Я включаю, чтобы проиллюстрировать пункт, который я делаю ниже, о поиске шаблонов проектирования для любого используемого вами языка.

При взгляде на dofactory вы видите три области, в которые попадают паттерны; Креативная, структурная, поведенческая. Когда вы ищете шаблон, знаете, чего вы пытаетесь достичь.

Несколько советов

  • Не заставляйте шаблон, если он не подходит, естественно, проблемы.
  • Не переусердствуйте над решением, пытаясь заставить шаблоны в каждой строке кода, который вы пишете, они полезны, но не всегда нужны.
  • При необходимости используйте несколько шаблонов, это прекрасно «Хорошо», чтобы иметь несколько паттернов, играющих близко друг к другу, снова .. если это естественная подгонка.
  • Изучите несколько общих паттернов, этот небольшой список является моим собственным, но поиск в Google откроет другие персональные списки часто используемых шаблонов;
    • Стратегия
    • [Abstract] Фабрика
    • Singleton
    • Команда
    • декоратор
    • наблюдатель
  • ли искать шаблоны дизайна для любого языка вы пытаетесь узнать, это даст вы лучше понимаете, как лучше использовать язык. (см. бонус-ссылку выше)
  • Распределите свои крылья после того, как вы получите достойное представление о шаблонах GoF и посмотрите на шаблоны корпоративного дизайна.

Надеюсь, этот ответ поможет вам найти путь к изучению шаблонов проектирования. Я знаю, что это точно не отвечает на ваш вопрос, но, надеюсь, это поможет вам понять немного лучше и позволить вам вернуться с более конкретным вопросом о шаблонах проектирования и использовании вашего кода.

1

Вы должны следовать за «Мост».

The Bridge Pattern используется для выделения интерфейса из его реализации. Это дает гибкость, так что оба могут варьироваться независимо.

Ответ взят из: When do you use the Bridge Pattern? How is it different from Adapter pattern?

Схема моста является применением старого совета, «предпочитает состава над наследованием». Это становится удобным, когда вы должны подклассифицировать разными способами способами, ортогональными друг другу. Скажем, вы, , должны реализовать иерархию цветных фигур. Вы не подклассы Форма с прямоугольником и кругом, а затем подкласс Rectangle с RedRectangle, BlueRectangle и GreenRectangle и то же самое для Кругом, не так ли? Вы бы предпочли сказать, что каждая фигура имеет цвет и реализовать иерархию цветов, а это шаблон моста . Ну, я бы не реализовал «иерархию цветов», но вы, , получили идею ...

Смежные вопросы