2010-03-27 13 views
1

J'ai un problème de conception. J'ai une classe Drawer qui invoque une série de méthodes d'une classe de type de pinceau et j'ai des formes prédéfinies que je veux dessiner. Chaque forme utilise une liste de méthodes d'instance du tiroir. Je peux avoir plus d'un objet pinceau.
Je souhaite ajouter des formes personnalisées à l'exécution dans l'occurrence de tiroir, en particulier la liste des méthodes de la nouvelle forme.
J'ai créé une méthode de classe pour chaque forme prédéfinie qui retourne un BlockClosure avec les instruccions. Évidemment, je dois donner à chaque BlockClosure l'objet brush en paramètre. J'imagine une collection avec toutes les BlockClosures dans chaque instance de la classe Drawer. Peut-être que je peux hériter d'un SequenceableCollection et faire une collection d'instruccion. Chaque élément de la collection est une instruction et je donne l'objet pinceau quand je pars cette nouvelle collection. Je ne connais vraiment pas la meilleure façon de stocker ces étapes.
(peut-être une variable partagée?)Store Liste de l'instruction

+1

Je ne comprends pas ce que vous voulez réaliser. Cela ressemble à vos formes ont juste besoin d'une méthode comme drawOn: aDrawer utilisant: aBrush Ou voulez-vous dire le protocole de dessin entre les formes et le tiroir n'est pas connu à priori? –

Répondre

1

Peut-être que vous pouvez utiliser anActionSequence avec des instances de MessageSend et les mettre en aDictionary dans votre tiroir (je préfère « peintre » comme un nom de classe pour cette catégorie, puisque les sons « tiroir » un peu comme la partie de meubles dans mes oreilles :)

Je ne suis pas vraiment sûr de ce que vous voulez atteindre exactement.

+0

Je me demandais si je pouvais utiliser un BlockClosure insted d'ActionSequence. Mais il doit s'agir d'un BlockClosure sans paramètres. J'ai vu que je peux faire aMethod: aParameter^[aParameter doSomething]. mais je ne l'aime pas tellement. J'utilise une méthode de classe pour chaque forme prédéfinie qui renvoie un objet que je peux exceute avec la valeur du message. Je dois décider si je renvoie un jeje Closure ou ActionSequence. Oui, le nom sera Painter - - –

+0

Mais pour votre programme, il ne semble y avoir aucune différence entre aBlock et anActionSequence ... Peut-être que vous pouvez poster du code source ^^ –

0

Bongiorno, Luciano! La domanda di Lei n'est pas trop chiara. Eh ... Je préfère utiliser l'anglais, mon italien est plutôt pauvre.

Votre question n'est pas très claire. Cela pourrait aider si je connaissais davantage le contexte de votre problème. Quel type de logiciel développez-vous? Pourquoi avez-vous besoin de nombreuses instances de la classe 'Drawer' (ou Painter)? D'après ce que j'ai pu deviner maintenant, je suppose que vous avez besoin d'une variante du modèle Interpreter. Le livre "Gang of Four" (Design Patterns: éléments de logiciels orientés objet réutilisables) est un incontournable pour tous les programmeurs. Pour les Smalltalkers, je recommande fortement «The Design Patterns Smalltalk Companion» de Sherman Alpert, Kyle Brown et Bobby Woolf comme référence quotidienne. Désolé, c'est tous les conseils que je peux donner concernant votre problème tel qu'il est actuellement formulé.