是否有描述以下设置的设计模式?这种设计是否存在任何重大问题?
类Widget
实例可以由“哑”构造函数Widget.__init__()
或“智能”工厂方法构建Workbench.upgrade_widget()
:
class Widget:
def __init__(self, abc, def, ...):
self.abc = abc
self.def = def
...
...
class Workbench:
# widget factory function, which uses data from the workbench instance
def upgrade_widget(self, widget, upgrade_info):
widget = Widget(widget.abc, widget.def, ...)
# I will modify the widget's attributes
...
self.rearrange_widget(widget, xyz) # modifies widget's internal state
...
widget.abc = ... # also modifies widget's state
...
return widget
# uses data from the workbench instance
def rearrange_widget(self, widget, xyz):
...
# this class does other stuff too
...
小部件是不可变的,因为我不能在它们完全初始化后修改它的实例(很多代码都依赖于这个不变量)。但是我发现在初始化时修改小部件非常方便,并且使代码更清晰。
我主要担心的是我修改了不同类中的“不可变”小部件。如果它只是 in upgrade_widget
,我可能会接受它,因为它不会修改传递给它的小部件。但是该方法依赖于其他Workbench
方法 ( rearrange_widget
),这些方法会修改它作为参数接收的小部件。我觉得我正在失去对这个“不可变”实例实际可以修改的位置的控制——有人可能会不小心调用rearrange_widget
一个已经完全初始化的小部件,从而导致灾难。