Шаблон StringBuilder и Builder - PullRequest
15 голосов
/ 08 марта 2011

Я новичок в Design Patterns, поэтому у меня есть один вопрос по поводу Builder Pattern.Сегодня я слышал, что Builder Pattern отличается от класса StringBuilder в Java, C #.Я знаю, что главная цель Pattern Builder состоит в том, чтобы создавать сложные объекты в несколько шагов ... Я думаю, что это делает StringBuilder с его методом Append ... Так что вряд ли я найду разницу ...

Не могли бы вы сказать мне, есть ли какая-то разница, и если это ... что это:)?

Ответы [ 3 ]

18 голосов
/ 08 марта 2011

Похоже, вы путаете класс StringBuilder и шаблон проектирования Builder.На самом деле это две совершенно разные идеи.

StringBuilder - это класс в Java и .NET , который позволяет выполнять более производительные строковые операции: (FromMSDN)

Объект String является неизменным.Каждый раз, когда вы используете один из методов в классе System.String, вы создаете новый строковый объект в памяти, который требует нового выделения пространства для этого нового объекта.В ситуациях, когда необходимо выполнить повторные изменения строки, накладные расходы, связанные с созданием нового объекта String, могут быть дорогостоящими.Класс System.Text.StringBuilder можно использовать, когда вы хотите изменить строку без создания нового объекта.Например, использование класса StringBuilder может повысить производительность при объединении большого количества строк в цикле.

Pattern Builder , с другой стороны, является шаблоном проектирования, представляющим собой наборклассы и / или интерфейсы, предназначенные для организации сложного кода:

Шаблон построения - это шаблон проектирования программного обеспечения.Намерение состоит в том, чтобы абстрагировать этапы построения объектов, чтобы разные реализации этих этапов могли создавать разные представления объектов.Часто шаблон построителя используется для построения продуктов в соответствии с составным шаблоном, структурным шаблоном.

Метод Append для StringBuilder просто добавляет больше символов к существующей строке.Новые объекты не создаются (базовая функция шаблона построения ), и шаблон проектирования не используется.Это единственный вызов метода для одного экземпляра объекта.

7 голосов
/ 12 октября 2011
  1. Различного назначения. String Builder помогает в построении строк, шаблон Builder отделяет конструкцию объекта от его представления.
  2. Разная структура. String Builder имеет двух соавторов, шаблон Builder имеет четырех соавторов.

ad 1) Нет абстракции при создании String. Например, древовидная структура - это абстракция, которая может быть представлена ​​объектами или файлом XML (реализация).

ad 2) При использовании объекта StringBuilder есть два соавтора:

  1. Client
  2. StringBuilder

При использовании Builder Pattern имеется четыре соавтора:

  1. Director - он говорит Abstract Builder, каковы этапы построения (В случае древовидной структуры это следующие шаги: создать root, добавить дочерний элемент, ...)
  2. Abstract Builder - это абстракция, используемая Director.
  3. Concrete Builder - это конкретная реализация Abstract Builder (может быть XMLBuilder, ObjectBuilder, ...)
  4. Client - говорит Director начать строительство.
0 голосов
/ 20 декабря 2013

Анализируя документацию, могу сказать, что StringBuilder не использует соответствующий шаблон.Используется Композитный узор .Шаблон Builder не собирает объект «вручную, пошагово» или в цикле.Имеет готовые решения.

...