我在学校学习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 方法以反映这些更改以及使用该方法的每个客户端。
那么使用这种模式有什么好处?
答案 0 :(得分:1)
我已经知道解耦实际上是在问“你能从系统中提取这个类吗?”。因此,通过隐藏方法后面的对象的创建,给定此对象不会在创建者之外的任何地方使用,它有效地将对象与系统分离。
答案 1 :(得分:0)
解耦是因为存储库对象可以是任意的;也就是说,您可以选择将哪个存储库对象传递到计算机对象中。虽然仍有CreateUser方法,但User数据的来源取决于使用哪个存储库对象。
在您的示例中,存储库对象通常称为UserRepository对象。