2010-03-27 79 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」作爲日常參考。

對不起,這是我可以給你的問題,因爲它是目前制定的。