Поиск  
Always will be ready notify the world about expectations as easy as possible: job change page
Apr 5, 2023

Should you use constructor or factory method?

Автор:
Pradeesh Kumar
Источник:
Просмотров:
1525

Constructor

We have been using constructors in object-oriented programming languages such as Java, C++, etc. A constructor is a special type of static method which can be invoked using thenew keyword and used to initialize the fields of a newly created object.

Problem with constructors

  1. The name of the constructor must match the name of the class, hence you cannot give a meaningful name to the constructor.
  2. The return type is not applicable to the constructor, hence you can always expect the object of the same class. It means you cannot return the object of its subtype of the class.
  3. You cannot mock a constructor for unit testing.

Static factory methods

The static factory method is another way of creating and initializing an object. Using the static factory method instead of a constructor allows you to return objects of different subtypes based on the arguments, making the code more flexible and easier to understand.

Additionally, static factory methods can have more descriptive names, making the code more self-explanatory, and they can also return objects that are already created, which can help to reduce unnecessary object creation and improve performance.

Note: Static factory methods are not the same as the factory design pattern.

Example

public class ComplexNumber
{
    private final double realPart;
    private final double imaginaryPart;

    private ComplexNumber(double realPart, double imaginaryPart)
    {
        this.realPart = realPart;
        this.imaginaryPart = imaginaryPart;
    }

    public static ComplexNumber fromRealNumber(double realPart)
    {
        return new ComplexNumber(realPart, 0);
    }

    public static ComplexNumber fromImaginaryNumber(double imaginaryPart)
    {
        return new ComplexNumber(0, imaginaryPart);
    }

    // ... other methods ...
}

In this approach, the developer can create instances of ComplexNumber by calling the appropriate static factory method, such as ComplexNumber.fromRealNumber(3.14). This can be more readable and expressive than using a constructor, especially when the construction process is more complex or involves multiple steps.

Few use cases in Java platform classes

Here are a few examples of Java built-in classes that use static factory methods:

Optional

Instead of using a constructor to create an instance of Optional, you can use static factory methods such as of, ofNullable, and empty. For example:

Optional<String> programmer = Optional.of("Mia");

LocalDate

LocalDate dateOfBirth = LocalDate.of(2020, 1, 1);

Collections

List<String> emptyList = List.of();
Set<String> numbers = Set.of(1, 5, 10);
Map<String, Integer> emptyMap = Collections.emptyMap();

Also, In Effective Java, Joshua Bloch clearly states that “Consider static factory methods instead of constructors” in this book.

Conclusion

This article explained the features of constructors in object-oriented programing languages, their cons, why a static factory method is useful, and what it can do that a constructor cannot do.

After all, there is no hard and fast rule for following this approach. It's completely up to the developer to choose the preferable way.

Похожее
Feb 26, 2023
Author: Ian Segers
Error handling with Async/Await in JS This will be a small article, based on some issues I picked up during code reviews and discussions with other developers. This article is rather focused on the novice JS developers. A Simple Try...
Sep 12
Author: Bubu Tripathy
Data consistency in a Spring Boot application Concurrent database updates refer to situations in which multiple users or processes attempt to modify the same database record or data concurrently, at the same time or in rapid succession. In a multi-user...
24 марта
Автор: Ivan Kolesov
Фреймворк Angular используется при создании SPA и предлагает большое количество инструментов как для создания, непосредственно, элементов интерфейса, так и CLI для создания и управления структурой файлов, относящихся к приложению. Для создания проекта с использованием библиотеки Angular, официальный сайт предлагает нам...
24 марта
Автор: Рафаил Агазода
Сегодня мы попытаемся построить и запустить магазин мороженого, при этом одновременно изучить асинхронный JavaScript. Также вы узнаете, как использовать: Callbacks. Promises. Async / Await. Вот что мы рассмотрим в этой статье: Что такое асинхронный JavaScript. Синхронный и асинхронный JavaScript. Как...
Написать сообщение
Тип
Почта
Имя
*Сообщение
RSS
Если вам понравился этот сайт и вы хотите меня поддержать, вы можете
Жуткий сценарий использования ChatGPT
Правило 3-х часов: сколько нужно работать в день
Как избавиться от прокрастинации до того, как она разрушит вашу карьеру
Soft skills: 18 самых важных навыков, которыми должен владеть каждый работник
101 вопрос, на которые должен ответить Python-разработчик
Что айтишнику не стоит делать в 2020?
Протокол MQTT: концептуальное погружение
Функции и хранимые процедуры в PostgreSQL: зачем нужны и как применять в реальных примерах
Почему сеньоры ненавидят собеседования с кодингом, и что компании должны использовать вместо них
GraphQL решает кучу проблем — рассказываем, за что мы его любим
LinkedIn: Sergey Drozdov
Boosty
Donate to support the project
GitHub account
GitHub profile