Я прочитал, что использование шаблонов команд является одним из самых популярных способов выполнения функций do / undo.На самом деле, я видел, что можно сложить кучу действий и отменить их, чтобы достичь заданного состояния.Тем не менее, я не совсем уверен, как это можно сделать в Python и в большинстве прочитанных мною уроков, углубляюсь в концепции, но не показываю фактическую реализацию в Python.
Кто-нибудь знает, как это сделатьотменить функциональность работы в Python?
Для справки, это мой (наивный и, вероятно, ошибочный) код:
# command
class DrawCommand:
def __init__(self, draw, point1, point2):
self.draw = draw
self.point1 = point1
self.point2 = point2
def execute_drawing(self):
self.draw.execute(self.point1, self.point2)
def execute_undrawing(self):
self.draw.unexecute(self.point1, self.point2)
# invoker
class InvokeDrawALine:
def command(self, command):
self.command = command
def click_to_draw(self):
self.command.execute_drawing()
def undo(self):
self.command.execute_undrawing()
# receiver
class DrawALine:
def execute(self, point1, point2):
print("Draw a line from {} to {}".format(point1, point2))
def unexecute(self, point1, point2):
print("Erase a line from {} to {}".format(point1, point2))
, например:
invoke_draw = InvokeDrawALine()
draw_a_line = DrawALine()
draw_command = DrawCommand(draw_a_line, 1, 2)
invoke_draw.command(draw_command)
invoke_draw.click_to_draw()
invoke_draw.undo()
вывод:
Draw a line from 1 to 2
Erase a line from 1 to 2
Очевидно, что этот тест не позволяет стеку отменять несколько действий.Может быть, я полностью ошибаюсь, поэтому я был бы признателен за помощь.