我正在研究一个基于文本的UI小部件库,并且已经决定现在是时候我为我的库用户提供了通过应用程序对象封装应用程序范围配置的能力,如下所示:
class App:
def __init__(self, screen_size_tuple):
self.screen_size = screen_size_tuple
def get_screen_size(self):
return self.screen_size
class Widget:
def __init__(self, rows, cols, y, x, foo, bar, app):
self.rows = rows
self.original_dimensions = (rows, cols)
self.original_coords = (y, x)
#etc, etc
self.app = app
self.fullscreen = False
def self.toggle_fullscreen(self):
if self.fullscreen != True:
self.y = 0
self.x = 0
self.rows = self.app.screen_size[0] # y value from the application object
self.cols = self.app.screen_size[1] # x value from the application object
else:
self.y = self.original_coords[0]
self.x = self.original_coords[1]
self.rows = self.original_dimensions[0]
self.cols = self.original-dimensions[1]
我的问题有两个方面:首先,当我采用这种策略时,如何避免在创建时将App类的实例传递给每个小部件?将小部件创建委派给app对象本身的最佳做法是什么?其次,如果使用得当,这个设计模式是否有名称?它看起来有点像观察者或依赖注入,但我不确定这些模式是否适用于此。
提前致谢=)
答案 0 :(得分:1)
如果您想要“应用程序范围但不是全局”配置,则有一些常见模式:
app
对象创建窗口小部件对象,例如app.create(WidgetClass)
a = App()
f = FrameWidget()
a.add(f) # sets FrameWidget's config to a's config
b = ButtonWidget()
f.add(b) # sets ButtonWidget's config to f's config, which happens to be a's
c = CheckboxWidget()
f.add(c) # sets CheckboxWidget's config to f's config, also a's