looked over the article. what they do is a ui decorator, it is not the
software decorator pattern. there is no method delegation to the child
component. what they create is a composite, you can do the same thing
in wicket with a Border.

-igor

On Thu, Jun 12, 2008 at 9:55 PM, Igor Vaynberg <[EMAIL PROTECTED]> wrote:
> right. so when you would do it with a class you will actually have to
> rewire all the methods to forward to the delegate instead of calling
> super. that is pure insanity and does not make any sense when methods
> hold logic. that is why it works with an interface, no logic for you
> to override and forward to the delegate, only the message dispatch
> itself. sure, technically you can do it even with a concrete class,
> but you can also do a lot of other things that dont make sense.
>
> -igor
>
> On Thu, Jun 12, 2008 at 5:54 PM, Matthijs Wensveen <[EMAIL PROTECTED]> wrote:
>> Igor Vaynberg wrote:
>>>
>>> look at the java example. notice Window is an interface.
>>>
>>
>> Yeah, but that's just because it's good practice to use the interface when
>> there is one. Notice that the actually decorated class is a new
>> SimpleWindow() in DecoratedWindowTest. Window might as well have been an
>> abstract class, or even a concrete one. The idea is that the contract of the
>> class you wrap is maintained, if that is an interface your decorator
>> implements that, when it's a class your decorator extends it. Same idea. Of
>> course, interfaces are cleaner and you can even decorate more then one
>> interface when you want to, but decorating a class is not uncommon practice
>> (at least where I come from).
>>
>> Example: http://www.onjava.com/pub/a/onjava/2003/02/05/decorator.html
>>
>>> eg you cant do: add(new DecoratedComponent(someOtherComponent));
>>>
>>
>> No, because component has final methods that you can't override so you can't
>> delegate to them (that whas my point), but not because you can't decorate a
>> class.
>>
>> Matthijs.
>>
>> PS. If you insist on that you can only decorate an interface, I'll call it
>> wrap-extend or something :)
>>
>>> -igor
>>>
>>> On Thu, Jun 12, 2008 at 5:05 PM, Matthijs Wensveen <[EMAIL PROTECTED]>
>>> wrote:
>>>
>>>>
>>>> Why would the decorator design pattern only work with interfaces? Maybe
>>>> we're talking about two different this here? (I'm talking about this one:
>>>> http://en.wikipedia.org/wiki/Decorator_pattern)
>>>>
>>>> I can see why behaviors were introduced. A simple example: a factory
>>>> method
>>>> creates a link. In my subclass I want the same link with the same onClick
>>>> behavior but I also want "hello" to be outputted to System.out. How would
>>>> I
>>>> go about doing this with a Behavior? I couldn't figure it out... (which
>>>> isn't saying it's impossible).
>>>>
>>>> Matthijs
>>>>
>>>> [EMAIL PROTECTED] wrote:
>>>>
>>>>>
>>>>> decorators only work with interfaces, component class is not. This is
>>>>> part of the reason why we have behaviors
>>>>>
>>>>> -igor
>>>>>
>>>>> On 6/12/08, Matthijs Wensveen <[EMAIL PROTECTED]> wrote:
>>>>>
>>>>>
>>>>>>
>>>>>> Some useful design patterns like Decorator don't work with final
>>>>>> methods. Wicket components sometimes have overridable factory methods
>>>>>> for child components. The decorator pattern could be very useful here,
>>>>>> because you'd be able to decorate the original component with some
>>>>>> extra
>>>>>> functionality (Link.onClick for example). Unfortunately this doesn't
>>>>>> work because some methods are final.
>>>>>>
>>>>>> Matthijs
>>>>>>
>>>>>> Igor Vaynberg wrote:
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> i mean generally, for methods, fields, and func args :) most of this
>>>>>>> stuff can stay final, but people dont bother doing it because its
>>>>>>> extra typing.
>>>>>>>
>>>>>>> -igor
>>>>>>>
>>>>>>> On Thu, Jun 12, 2008 at 8:38 AM, James Carman
>>>>>>> <[EMAIL PROTECTED]> wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> You mean like C++?
>>>>>>>>
>>>>>>>> On Thu, Jun 12, 2008 at 11:35 AM, Igor Vaynberg
>>>>>>>> <[EMAIL PROTECTED]>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>>>>>>>>> indeed. i wouldnt mind if final was the default in java :)
>>>>>>>>>
>>>>>>>>> -igor
>>>>>>>>>
>>>>>>>>> On Thu, Jun 12, 2008 at 8:18 AM, Martijn Dashorst
>>>>>>>>> <[EMAIL PROTECTED]> wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Without the use of final wicket would not have made it this far.
>>>>>>>>>>
>>>>>>>>>> Martijn
>>>>>>>>>>
>>>>>>>>>> On Thu, Jun 12, 2008 at 5:08 PM, Brill Pappin <[EMAIL PROTECTED]>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> I understand the reasoning, however I think "best practice" can be
>>>>>>>>>>> debated.
>>>>>>>>>>> To use your example Swing allows the user to override quite a bit,
>>>>>>>>>>> and
>>>>>>>>>>> it
>>>>>>>>>>> doesn't make any (or very few) assumptions on what should and
>>>>>>>>>>> should
>>>>>>>>>>> not be
>>>>>>>>>>> done.
>>>>>>>>>>>
>>>>>>>>>>> I don't like API's that assume I'm an idiot and prevent me from
>>>>>>>>>>> manipulating
>>>>>>>>>>> them how I see fit. If I cause a bug that I have to deal with,
>>>>>>>>>>> thats
>>>>>>>>>>> *my*
>>>>>>>>>>> problem to resolve.
>>>>>>>>>>>
>>>>>>>>>>> In my book (and I'm not the only one) excessive use of final is an
>>>>>>>>>>> anti-pattern.
>>>>>>>>>>>
>>>>>>>>>>> - Brill Pappin
>>>>>>>>>>>
>>>>>>>>>>> On 12-Jun-08, at 10:01 AM, cowwoc wrote:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Brill,
>>>>>>>>>>>>
>>>>>>>>>>>> This is actually an API "best practice". Classes fall into two
>>>>>>>>>>>> categories:
>>>>>>>>>>>> ones designed for subclassing, and ones designed to be final. The
>>>>>>>>>>>> same
>>>>>>>>>>>> goes
>>>>>>>>>>>> for methods. Swing is full of examples of what goes wrong when
>>>>>>>>>>>> people
>>>>>>>>>>>> override methods in classes that haven't been designed with
>>>>>>>>>>>> subclassing in
>>>>>>>>>>>> mind.
>>>>>>>>>>>>
>>>>>>>>>>>> Gili
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Brill Pappin wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> on removing the finals
>>>>>>>>>>>>>
>>>>>>>>>>>>> The final members are the worst thing I've had to deal with in
>>>>>>>>>>>>> Wicket
>>>>>>>>>>>>> so far.
>>>>>>>>>>>>> Although I understand that there may be a reason for them, they
>>>>>>>>>>>>> are
>>>>>>>>>>>>> more a hinderance than anything else and seem to be trying to
>>>>>>>>>>>>> "protect
>>>>>>>>>>>>> users from themselves".
>>>>>>>>>>>>>
>>>>>>>>>>>>> - Brill Pappin
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On 12-Jun-08, at 1:03 AM, cowwoc wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Have you considered moving from subclassing to composition in
>>>>>>>>>>>>>> Wicket
>>>>>>>>>>>>>> using
>>>>>>>>>>>>>> Callable<T>?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Currently it is quite common for developers to subclass a
>>>>>>>>>>>>>> component
>>>>>>>>>>>>>> in order
>>>>>>>>>>>>>> to override isVisible() and other properties. I am proposing
>>>>>>>>>>>>>> that
>>>>>>>>>>>>>> instead
>>>>>>>>>>>>>> the component classes become final and properties may only be
>>>>>>>>>>>>>> set
>>>>>>>>>>>>>> using
>>>>>>>>>>>>>> setter methods. The setter methods would take Callable<T>
>>>>>>>>>>>>>> instead
>>>>>>>>>>>>>> of
>>>>>>>>>>>>>> T, so
>>>>>>>>>>>>>> for example setVisible(boolean) would become
>>>>>>>>>>>>>> setVisible(Callable<Boolean>)
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> The benefit of this approach is that you could introduce static
>>>>>>>>>>>>>> factory
>>>>>>>>>>>>>> methods to the Wicket components which would make them much
>>>>>>>>>>>>>> easier
>>>>>>>>>>>>>> to use in
>>>>>>>>>>>>>> their Generic form. You could then introduce various helper
>>>>>>>>>>>>>> classes
>>>>>>>>>>>>>> to
>>>>>>>>>>>>>> create Callable<T> for constant values, such as
>>>>>>>>>>>>>> Callable.valueOf(true) would
>>>>>>>>>>>>>> return a Callable<Boolean> that always returns true.
>>>>>>>>>>>>>> --
>>>>>>>>>>>>>> View this message in context:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> http://www.nabble.com/users%2C-please-give-us-your-opinion%3A-what-is-your-take-on-generics-with-Wicket-tp17589984p17792488.html
>>>>>>>>>>>>>> Sent from the Wicket - User mailing list archive at Nabble.com.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>>>>>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>>>>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> View this message in context:
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> http://www.nabble.com/users%2C-please-give-us-your-opinion%3A-what-is-your-take-on-generics-with-Wicket-tp17589984p17800710.html
>>>>>>>>>>>> Sent from the Wicket - User mailing list archive at Nabble.com.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>>>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Become a Wicket expert, learn from the best:
>>>>>>>>>> http://wicketinaction.com
>>>>>>>>>> Apache Wicket 1.3.3 is released
>>>>>>>>>> Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.3.3
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> ---------------------------------------------------------------------
>>>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>
>>>>>
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>
>>>>
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to