問題タブ [class-factory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 単純な構造体のようなクラスを生成するクラス ファクトリ?
Ruby を調査しているときに、単純な構造体のようなクラスを作成するためにこれに出くわしました。
これにより、いくつかのPythonの質問が発生しました。このメカニズムの [非常に] 基本的なクローンを Python で作成しました。
これを処理するための同様のメカニズムが Python に既にありますか? (私は通常、辞書を使用します)。
Struct()
正しい__init__()
引数を作成する関数を取得するにはどうすればよいですか。person1 = Person('John', 'Doe')
(この場合、可能であれば名前付き引数を実行したいと思います:person1 = Person(surname='Doe', forename='John')
興味のあることとして、これを行うためのより良い Python メカニズムがあったとしても、質問 2 に答えてもらいたいと思います。
c# - 基本クラスの静的メソッドを使用して、継承されたクラスをインスタンス化します
多くの継承クラスから派生した抽象基本クラスがあります。私がやりたいのは、静的メンバーが文字列を受け取ります。これは、文字列を解析できる最初のクラスであり(継承されたクラスの1つだけが解析できるはずです)、継承されたクラスのインスタンスを返します。
これは私が現在行っていることです。
私のコードが、将来のプログラマーが戻ってきて、継承されたクラスを追加するときにこの関数を編集することなく、すべての継承されたクラスをチェックするようにしたいと思います。
継承されたクラスに独自のクラスを実装させる方法はありGenerateCommand(string)
ますか?
public static abstract Epl2Command GenerateCommand(string command)
有効なc#ではありません。または、ハンマーを使用する必要があるときに、靴で釘を打ち込みますか。このクラスファクトリを実行するためのより良い方法をいただければ幸いです。
java - クラスファクトリの依存関係をライブラリに移動する方法
次のコードは、関連するすべてのクラスが同じプロジェクトにある(determineSubClass
のメンバーであるBaseClass
)場合に非常にうまく機能します。
BaseClass
しかし今、私は共有ライブラリプロジェクトに移動したいと思います。このプロジェクトではSubClassOne
、、、がライブラリSubClassTwo
ではなく、このライブラリを使用するアプリケーションで定義されています。SubClassThree
SubClassFour
もちろんBaseClass
、このライブラリを使用してすべてのアプリケーションに戻ることもできますが、疑問に思います。
- より良い解決策はありますか?
- ライブラリプロジェクトを維持
BaseClass
し、ライブラリプロジェクトから派生したすべてのスーパークラスについて知る必要をなくすソリューションはありますか?
編集(以下の@ahmet alp balkanの質問に答える):
ofType()
各サブクラスの2つのことを行います:
- 文字列p1と他のパラメータp2およびp3の内容に基づいて、インスタンス化されるサブクラスがそのタイプであるかどうかを判別します。
- 答えが肯定的である場合、それは自己サブクラスのオブジェクトをインスタンス化します。それ以外の場合は、nullを返します。
2番目の質問についてはBaseClass
、この時点で、すべてのサブクラスに共通のデータメンバーとメソッドがあり、インスタンス化するサブクラスを決定する責任を委任することを目的としたこの単一の静的メソッドのみが保持されます。
ところで、あなたの質問のおかげで、私は私の元の投稿でひどいタイプミスに気づきました:「SuperClassOne」は「SubClassOne」などでなければなりません。
python - ファクトリと通常のコンストラクタを使用することの長所と短所
(Python 3.2を使用していますが、それが重要かどうかは疑問です。)
、、およびクラスがclass Data
あります。クラスのインスタンスを表すために小文字を使用します。class Rules
Result
オブジェクトには、オブジェクトに適用された場合にオブジェクトを作成できるrules
ルールが含まれています。data
result
ルールを実際にデータに適用する(かなり複雑で進化している)コードをどこに配置するかを決定しています。私は2つの選択肢を見ることができます:
そのコードをクラス
Result
メソッド内に配置しますparse_rules
。Result
コンストラクターは引数としてrules
オブジェクトを取り、それをに渡しますself.parse_rules
。そのコードを新しいクラス内に配置します
ResultFactory
。ResultFactory
シングルトンクラスになります。このクラスにはbuild_result
、rules
引数として新しく作成されたresult
オブジェクトを返すメソッドなどがあります。
2つのアプローチの長所と短所は何ですか?
python - クラスファクトリと抽象基本クラス
抽象基本クラスに基づいていくつかのクラスを定義しようとしています。これらの各クラスは、基本的に視覚化パッケージのセル形状を定義します。セルはいくつかの頂点(ポイント)で構成されており、各サブクラスには異なる数のポイントが必要です。各クラスは、固定数の点座標のコンテナと考えることができます。
例として、基本クラスを考えてみましょう。Shape
これは、座標のリストの単なるコンテナです。
理想的には、たとえば、メソッドが長さ4のSquare
クラスをpoints.setter
チェックできるようにする必要があります。さらに、ユーザーがインスタンス化できないsequence
ようにしたいと思います。抽象基本クラスとして定義できる方法はありますか?形状の定義を次のように変更してみました。Shape
Shape
これには、プロパティを定義するためのサブクラスが必要npoints
です。Square
次に、クラスを次のように定義できます。
ただし、これを実装するのはかなり面倒です(実装するプロパティが複数ある場合)。私は自分のサブクラスを作成するクラスファクトリを定義したいと思っていました。
このクラスファクトリ関数は有効なアプローチですか、それともnpoints
プロパティを壊してしまいますか?type
の呼び出しを次のようなより冗長なものに置き換える方がよいでしょうか。
別のアプローチは、クラス属性を定義し、の
プロパティをに_NPOINTS
変更することです。npoints
Shape
ただし、次の理由から、抽象基本クラスを使用する利点が失われます。
type
、を使用してクラス属性を定義する方法がわかりません。- 抽象クラス属性を定義する方法がわかりません。
この抽象基本クラスとクラスファクトリ関数、または完全に優れた設計を実装するための最良の方法について誰かが考えていますか?
apache-flex - FlexItemRenderers
ItemRendererがClassFactoryであり、ClassFactoryのnewInstanceメソッドを使用してItemRendererのインスタンスを取得できることを知っています。しかし、私の質問は、ClassFactory.newInstance()を使用せずにItemRendererのメソッドを使用することは可能ですか?
私の場合、このnewInstanceメソッドは状態を保持しないため、使用できません。
これを行う方法はありますか?ありがとう!
python - Python - ファクトリ メソッドを強制的に使用してオブジェクトをインスタンス化するにはどうすればよいですか?
すべてが 1 つの基本クラスから継承される一連の関連クラスがあります。ファクトリ メソッドを使用して、これらのクラスのオブジェクトをインスタンス化したいと考えています。オブジェクトを呼び出し元に返す前に、クラス名をキーとする辞書にオブジェクトを格納できるため、これを行いたいと考えています。次に、特定のクラスのオブジェクトに対する要求がある場合、そのオブジェクトが辞書に既に存在するかどうかを確認できます。そうでない場合は、インスタンス化して辞書に追加します。もしそうなら、辞書から既存のオブジェクトを返します。これにより、基本的にモジュール内のすべてのクラスがシングルトンに変わります。
私がこれをしたいのは、それらすべてが継承する基本クラスがサブクラスの関数の自動ラッピングを行うためであり、関数が複数回ラップされることを望まないためです。同じクラスが作成されます。
これを行う唯一の__init__()
方法は、常に呼び出される基本クラスのメソッドでスタック トレースをチェックし、スタック トレースがオブジェクトを作成する要求が工場機能。
これは良い考えですか?
編集:これが私の基本クラスのソースコードです。これをよりエレガントに実現するには、メタクラスを理解する必要があると言われましたが、今のところはこれだけです。すべての Page オブジェクトは同じ Selenium Webdriver インスタンスを使用します。これは、上部にインポートされたドライバー モジュールにあります。このドライバは、初期化に非常にコストがかかります。LoginPage が初めて作成されるときに初期化されます。初期化後、initialize()
メソッドは新しいドライバーを作成する代わりに、既存のドライバーを返します。これは、ユーザーが LoginPage を作成することから始めなければならないという考え方です。最終的には何十もの Page クラスが定義され、それらは単体テスト コードによって使用され、Web サイトの動作が正しいことを検証します。
ページが数回インスタンス化されても大したことではありません。メソッドは数回ラップされ、不要なチェックがいくつか行われますが、すべてが機能します。しかし、ページが何十回、何百回、何万回もインスタンス化されるのは良くありません。各ページのクラス定義にフラグを立てて、メソッドが既にラップされているかどうかを確認することもできますが、クラス定義を純粋かつクリーンに保ち、すべてのまやかしをページの奥深くに押し込むというアイデアが気に入っています。誰もそれを見ることができず、ただ機能する私のシステム。
c# - 必要な派生クラスを作成するためのクラスファクトリの作成方法
私はよくクラスファクトリパターンを使用します。このパターンでは、クラスにプライベートコンストラクタと静的メソッドを使用してクラスを作成します。これにより、何らかの理由でクラスを構築できず、nullが返される状況が可能になります。これは非常に便利です。
これを、条件に応じて派生クラスの階層から特定のクラスを作成するファクトリメソッドに拡張できるようにしたいと思います。ただし、派生クラスのコンストラクターを非表示にして、ファクトリメソッドの使用を強制する方法がわかりません。ファクトリメソッドが基本クラスにある場合、派生クラスのプライベートコンストラクタにアクセスできなくなります。必要な型を事前に知っておく必要があるため、すべての派生クラスにファクトリメソッドを配置しても機能しません。ネストされたクラスは、クラスがネストされたクラスのプライベートメンバーにアクセスできる場合の方法かもしれませんが、残念ながら、ネストされたクラスはそれを含むクラスのプライベートメンバーにアクセスできるようですが、その逆はありません。
誰かがこれを行う方法を知っていますか?