2016-06-17 5 views
0

良いコーディングの方が良いと思いますか?オブジェクト指向プログラミング:オブジェクトを作成する別の方法がありますか?

私はオブジェクトを作成するときに、新しいキーワードを使ってそのクラスのインスタンスを作成します。

var objA = new A() 

私はクラスの静的メソッド名CreateAを作成することによって、オブジェクトを作成し、CreateNewAかのCreateInstanceの代わりに、新しいA()を呼び出すことによって、Aのオブジェクトを作成する場合。

var objA = A.CreateNewA() instead of var objA = new A(). 

A.CreateNewA()はコードを読みやすくします。これを元に、CreateNewAという静的メソッドを作成する必要があります。

+0

説明しているのはファクトリメソッドです。しかし、正直なところ:これによりコードが読みやすくなると思いますか?すでに述べたように、より多くのコードを書く必要があるため、より多くのコードを読む必要があります。次のことは、すべてのオブジェクトは、あなたの議論に関する静的メソッドを持っている必要があります... – lokusking

+0

私はクラスで作成した静的メソッドは、コードをより読みやすくしないと思うので、最初のオプションが優れていて、 。 –

+0

True ... Oh coz私は他のコードでいくつかのデータオブジェクトにマップされたThrift Structを持っているので、マッピングを行うためにCreateAという名前をつけた場合、読み込んだときにオブジェクトAの新しいコピーを作成しない内部ではオブジェクトAを作成しています。もしCreateNewAという名前をつけて読んだら、新しいAオブジェクトの作成を明示しています。 – LittleFunny

答えて

0

A.CreateNewA()は必要ないと思います。

"new"キーワードを使用して新しいインスタンスを作成すると、読みやすく分かりやすくなります。また、例えば、私たちはあまりにもコンストラクタクラスに初期値を渡すために他の人のよう

const studentA = new Student('firstname', 'lastname') 
+0

また、引数を静的メソッドに渡してから、コンストラクタに渡します。 –

+0

@FrankPuffer、私は静的メソッドが必要でないことを意味します。 「new Class(params ..)」は既にすべての開発者にとって意味があります –

0

を許可する「新しい」キーワードを使用して

はすでにコメントで述べている、あなたはあなたの中に示してどのような2番目のコードサンプルはよくあります - 「ファクトリメソッド」と呼ばれる既知のデザインパターン。

具体的な例では、newでコンストラクタを直接呼び出すよりも大きな利点はありません。コンストラクタはまだ必要です。静的メソッド内で呼び出すだけで、非公開にすることができます。

ファクトリメソッドは、コンパイル時に作成するオブジェクトのクラスがわからない場合に意味があります。ファクトリメソッドは、コンストラクタとは異なり、クラスAのオブジェクトだけでなく、Aから派生したクラスのオブジェクトも返すことができます。

ファクトリメソッドを使用する主な理由は、オブジェクト作成を残りのプログラムロジックから分離することです。これは懸念の分離に有益です。もちろん、それは追加のコードを書いて(そして読んで)いることを犠牲にして来ます。

関連する問題