Sobes.tech
Middle+

Mi az a strukturális tervezési minták?

sobes.tech MI

Válasz az MI-től

A szerkezeti tervezési minták leírják, hogyan kombinálhatók osztályok és objektumok nagyobb struktúrák építéséhez. Segítenek az objektumok közötti interakció szervezésében, így a rendszer rugalmasabb és könnyebben karbantartható lesz.

Néhány gyakori szerkezeti minta:

  • Adapter (Adapter): Lehetővé teszi inkompatibilis interfészekkel rendelkező osztályok együttműködését.
  • Bridge (Híd): Elkülöníti az absztrakciót a megvalósítástól, így mindkettő függetlenül változhat.
  • Composite (Összetett): Lehetővé teszi, hogy egy csoport objektumot egyetlen objektumként kezeljünk.
  • Decorator (Díszítő): Dinamikusan ad hozzá új viselkedést az objektumokhoz anélkül, hogy módosítaná azok kódját.
  • Facade (Felület): Egységes felületet biztosít egy alrendszer interfészeinek halmazához.
  • Flyweight (Repülő súly): Memória megtakarítás, közös állapot megosztásával sok kis objektum között.
  • Proxy (Proxy): Egy másik objektum helyettesítője az hozzáférés kontrollálására.

Decorator minta példája:

# Alap komponens
class Coffee:
    def cost(self):
        return 5

    def description(self):
        return "Normál kávé"

# Alap dekorátor
class CoffeeDecorator:
    def __init__(self, coffee):
        self._coffee = coffee

    def cost(self):
        return self._coffee.cost()

    def description(self):
        return self._coffee.description()

# Konkrét dekorátor
class MilkDecorator(CoffeeDecorator):
    def cost(self):
        return self._coffee.cost() + 2

    def description(self):
        return self._coffee.description() + ", tejjel"

# Használat
my_coffee = Coffee()
print(my_coffee.description(), "-", my_coffee.cost()) # Normál kávé - 5

coffee_with_milk = MilkDecorator(my_coffee)
print(coffee_with_milk.description(), "-", coffee_with_milk.cost()) # Normál kávé, tejjel - 7

Ezek a minták rugalmasságot biztosítanak az objektumok összetételének használatával a öröklődés helyett, lehetővé téve a rendszer módosítását anélkül, hogy a meglévő kódot meg kellene változtatni.