Fabryki mają na celu tworzenie nowych instancji obiektów. Ich główną zaletą jest prostota ich użycia przez developera, nie musi znać nazw obiektów, które chce powołać do życia.
Wszelka logika związana z powstaniem oraz inicjalizacją instancji pozostaje w fabryce, co jest dużą zaletą jeśli jest to złożony proces np zależny od specyficznej konfiguracji aplikacji.
Nie jest wymagane użycie konstruktora do powołania obiektu, zwykle udostępniany jest interfejs w postaci funkcji zwracających gotowe obiekty.
function AdminUser(email, password, rank){ BasicUser.call(this, email, password); this.rank = "admin"; } function BasicUser(email, password){ this.email = email; this.password = password; this.rank = "user"; } let UserFactory = { getUser: function(email) { return new BasicUser(email, "qwerty"); }, getAdmin(email, password) { return new AdminUser(email, password, "admin"); } }
Fabryka może zwracać różne obiekty zależnie od potrzeb.
let user1 = UserFactory.getUser("user1@example.com");
// {email: "user1@example.com",
// password: "qwerty",
// rank: "user"}
let admin = UserFactory.getAdmin("admin@example.com", "123");
KW