GRASP Creator真的脱离了吗?

时间:2009-06-13 14:19:59

标签: design-patterns repository coupling grasp

我在学校学习GRASP模式,我对创作者模式有疑问。

假设您有三个类,计算机 UserRespository 用户

GRASP Creator模式的一个规则告诉您将创建对象的责任分配给包含这些对象的类。遵循本指南,UserRepository应该是User的创建者。

因此,如果计算机想要创建用户,他会询问UserRespository。

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


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

这有效地将计算机用户分离。真的?

显然,计算机没有任何对用户的引用,但我认为计算机仍然与用户的创建高度耦合。为什么? createUser 方法很难隐藏创建。如果用户更改了它的构造函数,则必须更改 createUser 方法以反映这些更改以及使用该方法的每个客户端。

那么使用这种模式有什么好处?

2 个答案:

答案 0 :(得分:1)

我已经知道解耦实际上是在问“你能从系统中提取这个类吗?”。因此,通过隐藏方法后面的对象的创建,给定此对象不会在创建者之外的任何地方使用,它有效地将对象与系统分离。

答案 1 :(得分:0)

解耦是因为存储库对象可以是任意的;也就是说,您可以选择将哪个存储库对象传递到计算机对象中。虽然仍有CreateUser方法,但User数据的来源取决于使用哪个存储库对象。

在您的示例中,存储库对象通常称为UserRepository对象。