2010-03-27 67 views
1

我有一个设计问题。 我有一个抽屉类,至少调用一类刷类的方法,我有一个预定义的形状,我想绘制。每个形状使用抽屉中的实例方法列表。我可以有超过1个画笔对象。
我想在抽屉实例的运行时添加自定义形状,指定新形状的方法列表。
我已经为每个预定义形状创建了一个类方法,该方法返回一个BlockClosure和instruccions。很明显,我必须将每个BlockClosure作为参数提供给画笔对象。我想象了抽屉类每个实例中的所有BlockClosures的集合。 也许我可以继承一个SequenceableCollection并创建一个instruccion集合。集合中的每个元素都是一条指令,当我实例化这个新集合时,我给了画笔对象。 我真的不知道存储这些步骤的最佳方式。 (可能是一个共享变量?)商店列表说明

+1

我不明白你想达到什么。听起来像你的形状只需要一种方法,如 drawOn:aDrawer使用:aBrush 或者你的意思是形状和抽屉之间的绘图协议是不知道的先验吗? – 2010-03-31 12:40:33

回答

1

也许你可以在一些MessageSend实例中使用anActionSequence,并将它们放在抽屉中的字典中(因为“Drawer”听起来更喜欢“Painter”作为该CLass的Classname非常像我耳中的家具部分:)

我不确定你想要达到的目标。

+0

我想知道是否可以使用ActionSequence的BlockClosure。但它必须是一个没有参数的BlockClosure。我看到我可以做一个方法:aParameter^[aParameter doSomething]。但我不喜欢这么多。我对每个预定义形状使用一个类方法,该方法返回一个Object,我可以优先于消息值。我必须决定是否返回关闭或ActionSequence jeje。是的,它的名字将是Painter - – 2010-03-31 00:46:38

+0

但是对于你的Programm,aBlock或anActionSequence之间似乎没有区别......也许你可以发布一些源代码^^ – 2010-03-31 10:08:24

0

Bongiorno,Luciano! La domanda di Lei nonètroppo chiara。 呃......我宁愿用英语,我的意大利语有点穷。

你的问题不是很清楚。如果我更了解您的问题背景,这可能会有所帮助。 你在开发什么样的软件?为什么你需要“Drawer”(或Painter)类的很多实例?

根据我现在能猜到的情况,我想你需要一些译员模式的变体。 “四人帮”一书(设计模式:可重用面向对象软件的元素)是每位程序员必读的书。 对于Smalltalkers,我强烈推荐Sherman Alpert,Kyle Brown和Bobby Woolf的“The Design Patterns Smalltalk Companion”作为日常参考。

对不起,这是我可以给你的问题,因为它是目前制定的。