混合装饰图案和工厂模式

时间:2011-02-24 10:51:54

标签: design-patterns factory-pattern

我们目前使用Microsoft的用户界面流程。 这基本上是一个MVP“框架”。 控制器通过输入/输出参数相互通信。

控制器定义了这两种方法void OnEnterTask(object inputArguments)OutputArguments OnLeaveTask()。 基本上所有inputarguments都包含xml-data。

输入参数只是dto,所以它由控制器决定如何解释xml。

情景:

CalculateProductInputArgs - > ProductController - > CalculateProductOutputArgs

如果产品控制器只需要处理效果很好的单个产品。 但它需要能够与CompositeProductController通信。 哪个发送CalculateCompositeProductInput/OutputArgs

所以我的thougts是由工厂创建的装饰器的组合

代码(伪python):

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 个答案:

答案 0 :(得分:1)

有一个工厂决定你需要创建什么装饰,这是非常合理的。

我可以建议的唯一变化是,您为CompositeProductProcessor找到了一个不同的名称,因为它不是Composite模式的实现,并且命名可能会让读者感到困惑。