【问题标题】:Does GRASP Creator really decouples?GRASP Creator 真的解耦了吗?
【发布时间】:2009-06-13 14:19:58
【问题描述】:

我正在学校学习 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 方法以反映这些更改以及使用该方法的每个客户端。

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

【问题讨论】:

    标签: design-patterns repository coupling grasp


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-03-23
        • 2015-08-25
        • 1970-01-01
        • 2012-01-25
        • 1970-01-01
        • 1970-01-01
        • 2021-12-04
        • 1970-01-01
        相关资源
        最近更新 更多