2011-02-24 109 views
0

我們目前使用Microsoft的用戶界面過程。 這基本上是一個MVP「框架」。 控制器通過輸入/輸出參數相互通信。混合decrator模式和工廠模式

控制器定義了這兩種方法void OnEnterTask(object inputArguments),OutputArguments OnLeaveTask()。 基本上所有的inputarguments都包含xml-data。

inputarguments只是dto的,所以它最多由控制器如何解釋xml。

場景:

CalculateProductInputArgs - >ProductController - >CalculateProductOutputArgs

如果ProductController的只是需要處理工作得非常好單品。 但它需要能夠與CompositeProductController進行通信。 它發送CalculateCompositeProductInput/OutputArgs

所以我的thougts是其由工廠

碼(僞蟒)創建裝飾的組合:

class Processor: 
    """abstract""" 
    def ProcessInput(input): 
     pass 

    def ProcessOutput(output): 
     pass 

class ProductProcessor(Processor): 
    """implements specific product behaviour""" 
    pass 

class CompositeProductProcessor(ProductProcessor): 
    """implements specific product behaviour""" 
    def __init__(productprocessor): 
     self.processor = productprocessor 

    def ProcessInput(input) 
     productInput = input.Product 
     compositeData = input.CompositeData 
     self.processor(productInput)  

class Factory: 
    def CreateProcessor(input): 
     productprocessor = ProductProcessor() #maybe a specialized processor 
     if input.IsComposite(): 
      composite = CompositeProductProcessor(productprocessor) 
      return composite 
     return productprocessor 

我的簡單的問題。 這是一個很好的做法嗎?或者你有更好的想法?

問候:)

回答

1

這是相當合理的,有一個工廠決定什麼裝飾()你需要創建。

我可以建議的唯一更改是,您找到CompositeProductProcessor的不同名稱,因爲它不是Composite模式的實現,命名可能會讓讀者感到困惑。

+0

是的,這可能會混淆開發人員。 – 2011-02-26 12:39:56