Sobes.tech
Middle+

Factory Builder დიზაინის ნიმუში რა არის?

sobes.tech AI

პასუხი AI-სგან

Factory Builder ნიმუში, ან უფრო სწორად Factory Method-ი Builder-თან ერთად, ორი ნიმუშის კომბინაციაა, რომელიც აუმჯობესებს რთული ობიექტების შექმნას.

Factory Method განსაზღვრავს ინტერფეისს ობიექტის შექმნისთვის, მაგრამ აძლევს ქვესკლასებს გადაწყვეტილების მიღების უფლებას, რომელი კლასი უნდა ინსტანცირდეს. ის პასუხისმგებლობას გადასცემს ობიექტის შექმნას ქვესკლასებს.

Builder გამოყოფს რთული ობიექტის კონსტრუქციას მის წარმოდგენიდან, ასე რომ იგივე კონსტრუქციული პროცესი შეიძლება შექმნას სხვადასხვა წარმოდგენები. ის საშუალებას აძლევს ობიექტის ეტაპობრივად შექმნას, მეთოდების ჯაჭვის გამოყენებით.

ამ ორი ნიმუშის კომბინაცია ხშირად გვხვდება სცენარებში, სადაც საჭიროა რამდენიმე ვარიანტის შექმნა რთული ობიექტის.

გამოყენების მაგალითი: როდესაც გაქვთ ობიექტების ჰიერქია, რომელიც მოითხოვს რთულ ინიციალიზაციას, და გსურთ ამ ობიექტების შექმნა სხვადასხვა კონფიგურაციით.

ტიპიური ურთიერთქმედების სტრუქტურა:

  • ფაბრიკა: აქვს მეთოდი, რომელიც აბრუნებს კონკრეტული Builder-ის მაგალითს, დამოკიდებულია შემოსულ პარამეტრებზე ან ტიპზე.
  • Builder: აქვს მეთოდები ეტაპობრივად კონფიგურაციის პარამეტრების დასაყენებლად და საბოლოო build() მეთოდი, რომელიც აბრუნებს მზად ობიექტს.
  • პროდუქტი: რთული ობიექტი, რომელიც შეიქმნა Builder-ის მიერ.

უპირატესობები:

  • კოდის უკეთესი წაკითხვადობა და მართვადობა რთული ობიექტების შექმნისას.
  • ერთიდაიგივე ტიპის ობიექტების სხვადასხვა კონფიგურაციის შექმნის მოქნილობა.
  • ობიექტის შექმნის ლოგიკის გამოყოფა მის წარმოდგენიდან.
  • ახალი პროდუქტის ტიპების (Factory Method-ის გამოყენებით) ან ახალი მშენებლობის მეთოდების (Builder-ის გამოყენებით) ადვილად დამატება.

მცირობები:

  • კლასების რაოდენობის ზრდა პროექტში.
  • შეიძლება იყოს ზედმეტი მარტივი ობიექტებისთვის.

მაგალითი (პსევდოკოდი):

// პროდუქტი
class ComplexObject {
    private String partA;
    private int partB;

    // პირადი კონსტრუქტორი
    private ComplexObject(String partA, int partB) {
        this.partA = partA;
        this.partB = partB;
    }

    // Builder-ის შიდა კლასი
    public static class Builder {
        private String partA;
        private int partB;

        public Builder setPartA(String partA) {
            this.partA = partA;
            return this;
        }

        public Builder setPartB(int partB) {
            this.partB = partB;
            return this;
        }

        public ComplexObject build() {
            return new ComplexObject(partA, partB);
        }
    }
}

// ფაბრიკა, რომელიც აბრუნებს Builder-ს
class ComplexObjectFactory {
    public static ComplexObject.Builder createDefaultBuilder() {
        return new ComplexObject.Builder()
                .setPartA("defaultA")
                .setPartB(10);
    }

    public static ComplexObject.Builder createSpecialBuilder() {
        return new ComplexObject.Builder()
                .setPartA("specialA")
                .setPartB(50);
    }
}

// გამოყენება:
// ComplexObject obj1 = ComplexObjectFactory.createDefaultBuilder().build();
// ComplexObject obj2 = ComplexObjectFactory.createSpecialBuilder().setPartA("customA").build();