2

学校で GRASP パターンを学んでいますが、Creator パターンについて質問があります。

ComputerUserRespository、およびUserの 3 つのクラスがあるとします。

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

したがって、Computer がユーザーを作成する場合は、UserRespository に問い合わせます。

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


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

これにより、 ComputerUserから効果的に分離されます。本当に?

明らかに、Computerには User への言及はありませんが、Computer は依然として User の作成と強く結びついていると思います。なんで?createUserメソッドは、作成をうまく隠していませんユーザーがコンストラクターを変更する場合、 createUserメソッドを変更して、それらの変更と、メソッドを使用するすべてのクライアントを反映する必要があります。

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

4

2 に答える 2

1

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

于 2009-08-04T20:39:48.147 に答える
0

デカップリングは、リポジトリオブジェクトが任意である可能性があるという事実から生じます。つまり、コンピュータオブジェクトに渡すリポジトリオブジェクトを選択できます。CreateUserメソッドはまだ存在しますが、Userデータのソースは、使用されるリポジトリオブジェクトによって決定されます。

あなたの例では、リポジトリオブジェクトはより一般的にUserRepositoryオブジェクトと呼ばれます。

于 2009-06-13T16:26:36.203 に答える