我正在努力了解我遇到的设计模式......请耐心等待我使用的语言是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
答案 0 :(得分:1)
我不确定我是否完全理解你的问题,请告诉我,如果我不在这里。
就像你写的那样,创建对象的设计模式称为工厂。您提到的其他功能,如写入磁盘应该是对象本身的责任。