我在学校学习 GRASP 模式,我对 Creator 模式有疑问。
假设您有三个类,Computer,UserRespository和User。
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));
}
这有效地将Computer与User解耦。真的吗?
显然,Computer没有提到 User,但我认为 Computer 仍然与 User 的创建高度耦合。为什么?createUser方法很难隐藏创建。如果User更改它的构造函数,您必须更改createUser方法以反映这些更改以及使用该方法的每个客户端。
那么使用这种模式有什么好处呢?