2009-06-13 13 views
2

J'apprends le pattern GRASP à l'école et j'ai une question sur le pattern Creator.Est-ce que GRASP Creator se découpe vraiment?

Disons que vous avez trois classes, Computer, UserRespository et utilisateur.

L'une des règles du modèle GRASP Creator vous demande d'attribuer la responsabilité de créer un objet à la classe contenant cet objet. En suivant cette directive, UserRepository devrait être le créateur de l'utilisateur.

Si l'ordinateur veut créer un utilisateur, il demandera UserRespository.

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


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

Cette découpler efficacement Computer de utilisateur. Vraiment?

Clairement, Ordinateur n'a aucune référence à l'utilisateur, mais je pense que l'ordinateur est encore fortement couplé à la création de l'utilisateur. Pourquoi? La méthode createUser masque mal la création. Si l'utilisateur change son constructeur, vous devrez changer la méthode createUser pour refléter ces changements et aussi chaque client utilisant la méthode.

Quels sont les avantages de l'utilisation de ce modèle?

Répondre

1

J'ai appris que le découplage demande vraiment "Pouvez-vous extraire cette classe du système?". Ainsi, en cachant la création d'un objet derrière une méthode, étant donné que cet objet n'est utilisé nulle part ailleurs que dans le créateur, il déconnecte effectivement l'objet du système.

0

Le découplage provient du fait que l'objet de référentiel peut être arbitraire; En d'autres termes, vous pouvez choisir l'objet de référentiel à transmettre à l'objet ordinateur. S'il existe toujours une méthode CreateUser, la source des données utilisateur est déterminée par l'objet référentiel utilisé.

Dans votre exemple, l'objet de référentiel serait plus communément appelé l'objet UserRepository.