ООП для чайников. Паттерны проектирования. Приспособленец (flyweight)

Следующий паттерн, — Приспособленец. Приспособленцы моделируют сущности, число которых слишком велико для представления объектами. В моем примере это отрисовка игровой карты (или участка карты). Например ваша карта состоит из плиток пола и стен, но по разному отрисовываются, с учетом света, времени суток, и других факторов. Создавать для каждого сегмента карты отдельный экземпляр, — слишком большая роскошь. Поэтому мы создаем по одному экземпляру каждого типа и с их помощью отрисовываем всю карту.

На диаграмме Приспособленец, выглядит следующим образом:

flyweight

Имеет использовать Приспособленца если одновременно выполняются следующие условия:

  • в приложении используется большое число обьектов, из-за этого высоки расходы на хранение
  • большую часть состояния обьектов можно вынести из объекта Приспособленца

Код примера:

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("")

--------------------------------

# # # # . # # # # # # # 
# . . . . . . . . . . # 
# . . . # # # # . . # # 
# . # . . . . # . . . # 
# # # # # # # # # # . # 

Site Footer

Sliding Sidebar

About Me

About Me

For whom this blog for?

For those who are interested in modern Internet technologies, IT business, startups, management, quality control, personal effectiveness, motivation. Here I write about what is interesting, about problems I faced and solutions I found. I hope it will be interesting to you either.

What motivates me to write?

The desire to improve, to study deeper topics that interest me. Find people with similar problems and tasks, together look for ways out and solutions.

Feel free to contact if you have anything to say to me

Old Flash site with my artistic works and misuc.