AXV

Loyihalash andozalari: Factory va Singleton

Creational patterns: Obyekt yaratishni boshqarish va global holat arxitekturasi

11-sinfProfessional IT3-hafta · 9-dars

Bugungi dars rejasi

01. Andozalar tasnifi

GoF 3 toifasi: Creational, Structural va Behavioral tushunchasi.

02. Factory Method

Obyekt yaratishni mijozdan ajratish va OCP asosida markazlashtirish.

03. Singleton arxitekturasi

Yagona nusxa kafolati, Python'da __new__ va test xatarlari.

01

Loyihalash andozalari (Design Patterns)

Tipik arxitektura muammolarining sinovdan o'tgan yechim modellari

GoF 3 asosiy toifasi

1. Creational Yaratuvchi andozalar • Factory Method • Singleton Obyekt qanday yaratiladi? 2. Structural Strukturaviy andozalar • Adapter • Facade / Decorator Sinflar qanday ulanadi? 3. Behavioral Xulq-atvor andozalari • Observer (Pub/Sub) • Strategy Obyektlar qanday muloqot qiladi?

Qachon andoza ishlatish kerak?

Over-engineering (Ortiqcha yuk)

Oddiy 5 qatorli masalaga ham 3 ta andoza tiqishtirish. Bu kodni og'irlashtiradi va tushunarsiz qiladi.

To'g'ri mezon (KISS & DRY)

Muammo aniq bo'lganda, tizim kengayishi talab etilganda va takrorlanishlar ko'paygandagina andoza joriy qilinadi.

02

Factory Method andozasi

Obyektlarni to'g'ridan-to'g'ri emas, maxsus «fabrika» orqali yaratish

Factory Method arxitekturasi

Client Code Mijoz kodi PaymentFactory create_payment(type) Yaratish logikasi bir joyda UzcardPayment HumoPayment

Nega Factory Method qulay?

Markazlashtirish

Obyekt yaratish logikasi butun loyiha bo'ylab sochilib ketmasdan bitta joyda turadi.

OCP ga to'liq mos

Yangi sinf qo'shilganda mijoz kodi o'zgarmaydi, faqat fabrika ro'yxatiga qo'shiladi.

Abstraksiya

Dasturning qolgan qismi aniq detallarga emas, umumiy interfeysga tayanadi.

03

Singleton andozasi

Butun dastur bo'yicha yagona nusxani kafolatlash va unga kirish nuqtasi

Singleton xotira modeli

AuthService OrderService DatabaseConnection._instance Yagona umumiy xotira manzili (0x7f8a...) db1 is db2 → True

Python'da `__new__` va `__init__` farqi

__new__(cls) — Yaratuvchi

Xotiradan obyekt uchun joy ajratadi. Singleton aynan shu yerda mavjud nusxa bor-yo'qligini tekshiradi.

__init__(self) — Boshlang'ichlovchi

Yaratilgan obyektga boshlang'ich qiymatlarni (atributlarni) yuklaydi.

Singleton qayerda zarur?

Connection Pool

Ma'lumotlar bazasi bilan cheklangan (masalan, 10 ta) ulanishlar zaxirasini boshqarish.

Logger

Barcha modullardan kelgan yozuvlarni bitta log faylga tartibli yozish.

ConfigManager

Dastur sozlamalarini xotiraga bir marta yuklab, barcha joyda bir xil o'qish.

Nega Singleton ba'zida «Anti-pattern»?

Global State

Istalgan modul xohlagan paytda o'zgartirib qo'yishi mumkin, bu xatolarni topishni qiyinlashtiradi.

Flaky Tests

Bitta unit-testda qolgan holat keyingi testlarning kutilmaganda qulashiga olib keladi.

Race Condition

Ko'p oqimli (multi-threading) tizimlarda qulflash (Lock) bo'lmasa, 2 ta obyekt ochilib ketadi.

Zamonaviy yechim: Dependency Injection

Qattiq global bog'liqlik

Har bir sinf ichida DB.get_instance() chaqiriladi. Test paytida uni soxtalashtirish (mock) juda qiyin.

DI orqali yagona nusxa uzatish

FastAPI yoki Spring kabi tizimlar obyektni o'zi 1 marta yaratadi va sinfga argument sifatida uzatadi. Test qilish juda oson!

Tezkor viktorina

Qaysi andoza butun tizim bo'yicha faqat bitta obyekt nusxasi bo'lishini ta'minlaydi?

To'g'ri: Singleton sinfning faqat 1 ta nusxasi bo'lishini kafolatlaydi.

Bugungi amaliy vazifa 25 daqiqa

OsonPython'da VehicleFactory tuzib, turiga qarab Car va Truck obyektlarini yarating.
O'rta__new__ metodi orqali AppLogger Singleton sinfini yozing va 2 ta o'zgaruvchi bitta xotiraga ega ekanini is bilan tekshiring.
QiyinLoyiha konfiguratsiyasini (.env) bir marta o'quvchi ConfigManager Singleton sinfini to'liq ishga tushiring.

Dars xulosasi

Design Patterns

Muammoga nisbatan o'ylangan arxitektura andozasi.

Factory

Obyekt yaratishni markazlashtirish va mijozni mustaqil qilish.

Singleton

Resurslarni tejovchi yagona nusxa (lekin global xatarlariga hushyor bo'lish lozim).

Keyingi dars: Observer andozasi va REST API asoslari

Publish-Subscribe modeli, hodisalarni kuzatish va HTTP/JSON arxitekturasi

4-hafta · 10-dars