Sobes.tech
Middle+

Какви са структурните модели за дизайн?

sobes.tech AI

Отговор от AI

Структурните шаблони за дизайн описват как класовете и обектите могат да бъдат комбинирани за създаване на по-големи структури. Те помагат за организиране на взаимодействието между обектите, правейки системата по-гъвкава и поддържана.

Някои често срещани структурни шаблони:

  • Адаптер (Adapter): Позволява на класове с несъвместими интерфейси да работят заедно.
  • Мост (Bridge): Разделя абстракцията от нейното изпълнение, позволявайки им да се променят независимо.
  • Композит (Composite): Позволява да се разглежда група от обекти като един обект.
  • Декоратор (Decorator): Динамично добавя ново поведение към обектите без да променя техния код.
  • Фасада (Facade): Предоставя унифициран интерфейс към набор от интерфейси в подсистема.
  • Flyweight (Flyweight): Спестява памет, споделяйки състояние между множество малки обекти.
  • Proxy (Proxy): Предоставя заместител за друг обект за контрол на достъпа до него.

Пример за използване на шаблона Декоратор:

# Основен компонент
class Coffee:
    def cost(self):
        return 5

    def description(self):
        return "Обикновено кафе"

# Основен декоратор
class CoffeeDecorator:
    def __init__(self, coffee):
        self._coffee = coffee

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

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

# Конкретен декоратор
class MilkDecorator(CoffeeDecorator):
    def cost(self):
        return self._coffee.cost() + 2

    def description(self):
        return self._coffee.description() + ", с мляко"

# Използване
my_coffee = Coffee()
print(my_coffee.description(), "-", my_coffee.cost()) # Обикновено кафе - 5

coffee_with_milk = MilkDecorator(my_coffee)
print(coffee_with_milk.description(), "-", coffee_with_milk.cost()) # Обикновено кафе, с мляко - 7

Тези шаблони осигуряват гъвкавост чрез използване на композиция на обекти вместо наследяване, което позволява да се правят промени в системата без да се променя съществуващият код.