2011-02-24 103 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