Строительство объекта - PullRequest
1 голос
/ 03 декабря 2010

В этом блоге я наткнулся на довольно необычный способ создания объекта класса: http://marchwicki.pl/blog/2010/11/building-a-pojo-in-an-elegant-way/. Это хороший способ сделать это.Каковы преимущества?

Ответы [ 6 ]

7 голосов
/ 03 декабря 2010

В этом блоге я встретил довольно необычный способ создания объекта класса: http://marchwicki.pl/blog/2010/11/building-a-pojo-in-an-elegant-way/.

Это шаблон проектирования конструктора с Свободный интерфейс .

Как вы видите из статьи, эти две идеи дополняют друг друга и часто используются вместе (которые я видел, некоторые называют "плавный строитель" ), настолько, что их часто путают как одно и то же:

Обратите внимание, что вы можете использовать шаблон компоновщика без интерфейса свободно (например, компоновщик с простыми установщиками).Вы также можете использовать идею свободного интерфейса в большем количестве контекстов, чем просто в сборщиках (например, для улучшения читаемости набора перегруженных методов со многими параметрами и вариациями параметров).

Это хороший способ сделатьthis?

Этот "беглый строитель" кажется весьма признанным как "хороший способ сделать это" (по крайней мере, исходя из количества статей и постов в блогах, которые я виделраспространение идеи).

Каковы преимущества?

Каждая идея имеет свои особые преимущества / преимущества.Например, см .:

4 голосов
/ 03 декабря 2010

Единственное преимущество - удобочитаемость. Кстати, это пример плавного интерфейса .

Свободный интерфейс стремится предоставить API, который при использовании производит больше читаемого кода, чем обычно обеспечивает стандартный API ООП.

3 голосов
/ 03 декабря 2010

Это простой пример шаблона Builder .Это позволяет отделить алгоритм создания сложного объекта от частей, составляющих объект, и способа их сборки. GoF объясняет последствия этого шаблона следующим образом:

  1. Это позволяет вам изменять внутреннее представление продукта .Объект Builder предоставляет абстрактный интерфейс для конструирования продукта.Интерфейс позволяет разработчику скрыть представление и внутреннюю структуру продукта.Это также скрывает, как продукт собирается.Поскольку продукт создается через абстрактный интерфейс, все, что вам нужно сделать, чтобы изменить внутреннее представление продукта, - это определить новый тип компоновщика.
  2. Он изолирует код для конструирования и представления .Шаблон Builder улучшает модульность, инкапсулируя способ построения и представления сложного объекта.Клиентам не нужно ничего знать о классах, которые определяют внутреннюю структуру продукта;такие классы не отображаются в интерфейсе Builder.Каждый ConcreteBuilder содержит весь код для создания и сборки определенного вида продукта.Код написан один раз;затем разные клиенты могут использовать его для создания вариантов продукта из одного и того же набора деталей.
  3. Это дает вам более точный контроль над процессом строительства .В отличие от шаблонов создания, которые конструируют продукты за один раз, шаблон Builder создает продукт шаг за шагом под контролем пользователя объекта Builder.Только когда продукт закончен, пользователь может получить его от застройщика.Следовательно, интерфейс Builder отражает процесс создания продукта больше, чем другие шаблоны создания.Это дает вам более точный контроль над процессом построения и, следовательно, внутренней структурой получаемого продукта.

Реальным примером этого шаблона является класс ProgramNodeBuilder в Smalltalk-80Подсистема компилятора.Исходный код анализируется объектом класса Parser, который инициализируется с помощью ProgramNodeBuilder.Объект Parser уведомляет свой объект ProgramNodeBuilder каждый раз, когда распознает синтаксическую конструкцию.Когда анализатор завершен, он запрашивает у построителя дерево разбора, которое он построил, и возвращает его клиенту.

3 голосов
/ 03 декабря 2010

Да, это то, что Джошуа Блох имел в виду в главе 2 своей "Эффективной Явы".

1 голос
/ 13 октября 2011

Лично я считаю использование Builder с интерфейсом Fluent очень полезным и очень интуитивно понятным.Вы можете лучше выразить свои намерения при отправке сообщений строителю.

Я написал небольшой пример Builder с Fluent Interface, надеюсь, это поможет.

http://jpereira.eu/2011/10/12/fluent-interfaces-while-trying-to-make-sense-of-prototype-pattern/

1 голос
/ 05 декабря 2010

Я очень рад сделать мой первый пост stackoverflow здесь, потому что вы обсуждаете мою статью: -)

Я думаю, что эта конструкция (использование как компоновщика, так и свободного интерфейса: свободный компоновщик) значительно улучшает читабельность кода. Более того (без обсуждения шаблонов проектирования) это доказывает свою ценность, когда нам нужны неизменные объекты. Проще говоря, сделав конструктор частным и удалив все установщики, мы получаем очень мощный инструмент для элегантного и удобочитаемого, но в то же время мощного способа построения неизменяемых объектов. Наконец, весь пост должен был быть больше посвящен умному использованию шаблонов для генерации повторяемого кода - но мне очень нравится обсуждение.

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