Builder pattern-i mürəkkəb obyektin qurulmasını onun yekun formasından ayırır. Çoxlu parametrli bir konstruktor əvəzinə kiçik adlı addımlar çağırır və build() ilə bitirirsiniz. O, obyektin çoxlu ixtiyari hissəsi olduqda, bir neçə addımda yığıldıqda və ya bütövlükdə yoxlanılmalı olduqda faydalıdır.

Teleskopik konstruktor

Sonuncu ixtiyari parametri vermək üçün əvvəlkilərin hamısını ötürmək lazımdır. Request("GET", "/users", None, {"page": 2}, None, 10, 3) çağırışı oxunmazdır, 10 və 3-ün yerini dəyişmək isə xəta vermir.

python
class Request:
    def __init__(self, method, url, headers=None, params=None,
                 body=None, timeout=30, retries=0):
        self.method, self.url = method, url
        self.headers = headers or {}
        self.params = params or {}
        self.body = body
        self.timeout, self.retries = timeout, retries

    def __repr__(self):
        return (f"{self.method} {self.url} params={self.params} "
                f"timeout={self.timeout} retries={self.retries}")

print(Request("GET", "/users", None, {"page": 2}, None, 10, 3))
text
GET /users params={'page': 2} timeout=10 retries=3
Teleskopik konstruktor çağırışı axıcı builder zənciri ilə yanaşı
Teleskopik konstruktor çağırışı axıcı builder zənciri ilə yanaşı

Axıcı interfeyslə addım-addım qurmaq

Hər addım bir hissəni saxlayır və self qaytarır, ona görə çağırışlar "cümləyə" çevrilir. build() məhsulu, burada parametr tuple-ı ilə SQL sətrini yaradır. Dəyərlər ? yer tutucuları ilə ötürülür və heç vaxt SQL-ə birləşdirilmir.