2009-06-13 27 views
2

私は学校でGRASPパターンを学習しています。私はCreatorパターンについて質問しています。GRASP Creatorは本当に切り離していますか?

のは、あなたが3クラスがあるとしましょう、コンピュータUserRespositoryユーザー

GRASP Creatorパターンのルールの1つは、オブジェクトを作成する責任をそれらのオブジェクトを含むクラスに割り当てることを指示します。このガイドラインに従うことで、UserRepositoryがUserの作成者である必要があります。

もしコンピュータがユーザを作成したいのであれば、彼はUserRespositoryに尋ねるでしょう。

//in Computer's code 
repo.createUser("John"); 


//in UserRepository 
public void createUser(String name) 
{ 
    users.add(new User(name)); 
} 

これは効果的ユーザーからコンピュータを切り離します。本当に?

明らかに、コンピュータにはユーザーへの参照はありませんが、コンピュータは依然としてユーザーの作成と結びついていると思います。どうして? createUserメソッドは、作成をあまり隠していません。 ユーザがコンストラクタを変更した場合は、createUserメソッドを変更し、そのメソッドを使用するすべてのクライアントに反映させる必要があります。

このパターンを使用する利点は何ですか?

答えて

1

私はデカップリングが本当に「このクラスをシステムから抽出できますか?」と尋ねています。したがって、メソッドの背後にあるオブジェクトの作成を隠すことによって、このオブジェクトは作成者以外の場所では使用されないため、オブジェクトをシステムから効果的に切り離します。

0

デカップリングは、リポジトリオブジェクトが任意であることが原因で発生します。つまり、コンピュータオブジェクトに渡すリポジトリオブジェクトを選択できます。依然としてCreateUserメソッドがありますが、Userデータのソースは、どのリポジトリオブジェクトが使用されているかによって決まります。

例では、リポジトリオブジェクトはUserRepositoryオブジェクトと呼ばれることがあります。

関連する問題