2

我在学校学习 GRASP 模式,我对 Creator 模式有疑问。

假设您有三个类,ComputerUserRespositoryUser

GRASP Creator 模式的规则之一告诉您将创建对象的责任分配给包含这些对象的类。按照这个指南,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方法很难隐藏创建如果User更改它的构造函数,您必须更改createUser方法以反映这些更改以及使用该方法的每个客户端。

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

4

2 回答 2

1

我了解到解耦实际上是在问“你能从系统中提取这个类吗?”。因此,通过将对象的创建隐藏在方法后面,鉴于此对象仅在创建者中使用,它有效地将对象与系统解耦。

于 2009-08-04T20:39:48.147 回答
0

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

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

于 2009-06-13T16:26:36.203 回答