2

どのデザインパターンにつまずいているかを理解しようとしています...私が使用している言語はMatlabであり、オブジェクト指向は一部の領域で少し弱く、デザインパターンの実装に比較的経験がありません。

コンストラクターが過度に複雑になっている ComplexObject があります。まず、私のコンストラクターは 0、1、または 2 つの引数を許可しました。これは、「空の」ComplexObject、ModelObject から構築された ComplexObject、または ModelObject+ConfigObject から構築された ComplexObject です。(ModelObject と ConfigObject は基本的なファイル パーサーです)。

Matlab ではコンストラクターをオーバーロードできないため、コンストラクターが単なる空のクラス初期化子になるように、一部を静的メソッドに変更した後、コンストラクターへの入力引数のクラス型を本質的に切り替えました。静的な ComplexObject.createFromModel および ComplexObject.createFromModelAndConfig クラスは、ComplexObject を生成しました。

次に、自分の ComplexObject コードがこのような構造要素に支配されており、ビジネス ロジックが明確ではないと判断したため、ComplexObjectFactory クラスを作成し、基本的に静的メソッドをそのクラスに移動しました。静的メソッドは実際には、ComplexObject を構築するために、よりプライベートな (静的!?) メソッドを呼び出しているため、これらのプライベートな静的メソッドの呼び出し規則について混乱に陥りました :(

最後に、ComplexObject の一部をディスクに書き戻すコードを追加しようとしています。興味深いことに、これは実際には ConfigObject の構築に使用されるのと同じディスク ファイルです。物事をさらに複雑にするために、複数のタイプの「構成」ファイル形式が必要です。

私の現在のクラスは次のようになります。

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 に答える