котором она используется?
В примере - стратегия поиска соседей в 2D сетке использует методы left, right, и т.д. этой сетки.
Я реализовал это передав self в стратегию. Но это выглядит очень ужасно.
class GridNeighborsStrategy(ABC):
@abstractmethod
def __call__(self, obj, x, y):
pass
class ClassicNeighborsStrategy(GridNeighborsStrategy):
def __call__(self, obj, x, y):
return obj.left(), obj.right(), obj.top(), obj.bottom()
class Grid2D:
def __init__(self, neighbors_strategy=None):
if neighbors_strategy is None:
neighbors_strategy = ClassicNeighborsStrategy()
self.neighbors_strategy = neighbors_strategy
def left(self): return
def right(self): return
def top(self): return
def bottom(self): return
def get_neighbors(self, x, y):
return self.neighbors_strategy(self, x, y)
example2DGrid = Grid2D()
print(example2DGrid.get_neighbors(0, 0))
Нормально выглядит, только выкинь твои left, right и тд и просто тащи через индексы
У меня в оригинале еще есть grid.get(x,y) Так что там все более абстрактно выглядит.
Обсуждают сегодня