шаблон построителя и ограничение неявного создания объекта - PullRequest
0 голосов
/ 14 июля 2011

Если я использую шаблон компоновщика, который создает какой-то ПРОДУКТ, возможно, мне стоит ограничить возможность создания этого ПРОДУКТА явным образом?

Поскольку, вероятно, пользователям моего кода нехорошо создавать ПРОДУКТ как новый ПРОДУКТ ().

Я имею в виду пользователей моего кода, которых я не знаю о каком-то сборщике.

Итак, я должен сделать конструктор PRODUCT закрытым?И тогда в Builder я бы использовал отражение, чтобы создать начальный экземпляр ПРОДУКТА?

Имеет ли этот подход смысл?Это нормально?

Ответы [ 3 ]

1 голос
/ 14 июля 2011

То, что вы описываете, называется фабричным шаблоном (а не шаблоном компоновщика).

Самый простой способ реализовать это - сделать ваш конструктор частным и предоставить статическую фабрику.методы класса Product.Это минимальная реализация:

public class Product {
    private Product() {}

    public static Product create() {
        return new Product();
    }
}

В JDK существует множество классов, которые следуют этому шаблону, например Integer.parseInt - это статический метод фабрики, который создается как Integer(хотя конструктор не является частным)

Кроме того, вы можете создать отдельный класс Factory в том же пакете, что и Product, и дать конструктору Product видимость по умолчанию.

Следует избегать использования отражения вВообще, если вам это действительно не нужно.В этом случае вам это не нужно - делайте все как можно проще (но не проще).

1 голос
/ 14 июля 2011

Если ваш ProductBuilder может создать экземпляр Product с помощью отражения, то любой другой класс может сделать то же самое.

Я думаю, проще добавить конструктор и продукт в одно и то же пространство имен (пакет) и сделать пакет конструктора частным. Он имеет тот же эффект (невидим для классов вне пакета) и сохраняет код в чистоте.

1 голос
/ 14 июля 2011

Или вы устанавливаете конструктор как защищенный и создаете конструктор в том же пакете, чтобы он имел к нему доступ, или создаете статические методы, которые могут даже неявно использовать ваш конструктор.

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