Sobes.tech
Middle+

Wat zijn structurele ontwerppatronen?

sobes.tech AI

Antwoord van AI

Structuurpatronen beschrijven hoe klassen en objecten kunnen worden gecombineerd om grotere structuren te bouwen. Ze helpen bij het organiseren van de interactie tussen objecten, waardoor het systeem flexibeler en onderhoudsvriendelijker wordt.

Enkele veelvoorkomende structuurpatronen:

  • Adapter (Adapter): Maakt het mogelijk dat klassen met incompatibele interfaces samenwerken.
  • Bridge (Brug): Scheidt abstractie van de implementatie, zodat beide onafhankelijk kunnen veranderen.
  • Compositie (Composite): Maakt het mogelijk om een groep objecten te behandelen als één object.
  • Decorator (Decorator): Voegt dynamisch nieuw gedrag toe aan objecten zonder de code te wijzigen.
  • Facade (Fasade): Biedt een eenduidige interface aan een set interfaces in een subsysteem.
  • Flyweight (Flyweight): Bespaart geheugen door gedeelde staat tussen veel kleine objecten.
  • Proxy (Proxy): Biedt een vervanger voor een ander object om toegang te controleren.

Voorbeeld van het gebruik van het Decorator-patroon:

# Basiselement
class Coffee:
    def cost(self):
        return 5

    def description(self):
        return "Normale koffie"

# Decorator basis
class CoffeeDecorator:
    def __init__(self, coffee):
        self._coffee = coffee

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

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

# Concrete decorator
class MilkDecorator(CoffeeDecorator):
    def cost(self):
        return self._coffee.cost() + 2

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

# Gebruik
my_coffee = Coffee()
print(my_coffee.description(), "-", my_coffee.cost()) # Normale koffie - 5

coffee_with_milk = MilkDecorator(my_coffee)
print(coffee_with_milk.description(), "-", coffee_with_milk.cost()) # Normale koffie, met melk - 7

Deze patronen bieden flexibiliteit door gebruik te maken van objectcompositie in plaats van erfelijkheid, waardoor wijzigingen in het systeem kunnen worden aangebracht zonder de bestaande code te wijzigen.