2012-01-29 15 views
0

私はテキストベースのUIウィジェットライブラリに取り組んでおり、私のライブラリのユーザがアプリケーション全体のコンフィグレーションをカプセル化する能力があると判断しました。アプリケーションオブジェクト、そのよう: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] 

私の質問は二つある:まず、私はこの戦術を採用する際に、どのように私は、作成時に各ウィジェットにアプリケーションクラスのインスタンスを渡すことを避けることができますか?ウィジェット作成をアプリケーションオブジェクト自体に委任するのがベストプラクティスですか?第二に、適切に採用された場合、このデザインパターンの名前はありますか?それはオブザーバーや依存症注入のようなものですが、ここではそのパターンが当てはまるとは確信していません。

事前に感謝=)

答えて

1

あなたは、「アプリケーション全体ではなくグローバル」設定をしたい場合は、いくつかの一般的なパターンがある:

  1. は、例えば、ウィジェットオブジェクトを作成するためにあなたのappオブジェクトを使用します
  2. 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 
+0

は同じくらい、ちょうどその戦術を採用することなく、いくつかの明白な理由がないことを確認したかったです。誰かが私に違ったことを言うまで、これを観察者モデルの緩やかな解釈と考えることにします。ご協力いただきありがとうございます。 <3ポニーパワー! <3 – Chazu

関連する問題