2

我正在尝试了解我正在绊倒的设计模式......请耐心等待我使用的语言是 Matlab 并且 OO 在某些领域有点弱,而且我在实现设计模式方面相对缺乏经验。

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

我不能在 Matlab 中重载构造函数,所以在我将其中的一些更改为静态方法以使构造函数只是一个空的类初始化程序之后,我基本上将输入参数的类类型切换到构造函数,并且静态 ComplexObject.createFromModel 和 ComplexObject.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 
4

1 回答 1

1

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

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

于 2012-10-24T13:16:37.613 回答