Следующий паттерн, — Приспособленец. Приспособленцы моделируют сущности, число которых слишком велико для представления объектами. В моем примере это отрисовка игровой карты (или участка карты). Например ваша карта состоит из плиток пола и стен, но по разному отрисовываются, с учетом света, времени суток, и других факторов. Создавать для каждого сегмента карты отдельный экземпляр, — слишком большая роскошь. Поэтому мы создаем по одному экземпляру каждого типа и с их помощью отрисовываем всю карту.
На диаграмме Приспособленец, выглядит следующим образом:
Имеет использовать Приспособленца если одновременно выполняются следующие условия:
- в приложении используется большое число обьектов, из-за этого высоки расходы на хранение
- большую часть состояния обьектов можно вынести из объекта Приспособленца
Код примера:
class Wall:
def draw(self):
return "#"
class Floor:
def draw(self):
return "."
class MapFactory:
def __init__(self):
self.classes = (Floor(), Wall())
def getMapClassByNum(self, num):
return self.classes[num]
if __name__ == '__main__':
map = """
111101111111
100000000001
100011110011
101000010001
111111111101"""
factory = MapFactory()
for line in map.split("\n")[1:]:
for i in line:
print(factory.getMapClassByNum(int(i)).draw()),
print("")
--------------------------------
# # # # . # # # # # # #
# . . . . . . . . . . #
# . . . # # # # . . # #
# . # . . . . # . . . #
# # # # # # # # # # . #