什么设计模式提供了生成类实例的静态方法

时间:2012-10-24 13:07:54

标签: matlab design-patterns

我正在努力了解我遇到的设计模式......请耐心等待我使用的语言是Matlab,OO在某些方面有点弱,而且我在实现设计模式方面相对缺乏经验。

我有一个ComplexObject,其中构造函数变得过于复杂。首先,我的构造函数允许0,1或2个参数,即“空”ComplexObject,从ModelObject构建的ComplexObject,或从ModelObject + ConfigObject构建的ComplexObject。 (ModelObject和ConfigObject是基本文件解析器)。

我不能在Matlab中重载构造函数,所以我实际上切换了构造函数的输入参数的类类型,之后我将其中的一些更改为静态方法,以便构造函数只是一个空类初始化程序和静态ComplexObject.createFromModel和ComplexObjet.createFromModelAndConfig类生成了ComplexObjects。

然后我决定我的ComplexObject代码被所有这些构造东西所支配,并且业务逻辑不清楚,所以我编写了一个ComplexObjectFactory类,基本上将静态方法移动到该类中。现在,因为静态方法实际上调用了更多私有(静态!?)方法来构建ComplexObject,所以我遇到了一些关于调用这些私有静态方法的约定的困惑:(

最后,我现在尝试添加一些代码来将ComplexObject的一部分写回磁盘。有趣的是,这实际上是用于构建ConfigObject的相同磁盘文件...所以我想要像ComplexObject.writeConfigFile ......或者应该是ComplexObjectFactory.writeConfigFile(myComplexObject)。为了进一步复杂化,我希望在轨道上有多种类型的“配置”文件格式。

我目前的课程类似于:

classdef ComplexObjectFactory
    methods (Static)
        function product = createFromModel(modelObj)
            product = ComplexObject()
            ComplexObjectFactory.helper1(product)
        end
        function product = createFromModelAndConfig(modelObj, configObj)
            product = ComplexObjectFactory.createFromModel(modelObj)
            ComplexObjectFactory.helper2(product, configObj)
        end
    end
    methods (Private, Static)
        function helper1(product)
        function helper2(product)
    end
end
classdef ComplexObject
    methods
        function self = ComplexObject(varargin)
            <init>
        end
    end
end

classdef ComplexObject 

1 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解你的问题,请告诉我,如果我不在这里。

就像你写的那样,创建对象的设计模式称为工厂。您提到的其他功能,如写入磁盘应该是对象本身的责任。