Yes, I thought of your option - but I'd have to write
a bunch of very similar code in each concrete
subclass...
What do you see as the negatives of option 2?
Gary
--- Thomas Dudziak <[EMAIL PROTECTED]> wrote:
> On Thu, 5 Feb 2004, Gary wrote:
>
> > Tom:
> >
> > Thanks for your help.
> >
> > I originally added the factory creation code. At
> the
> > time, I didn't realize I'd need a non-static
> method.
> >
> > The problem is that I have an abstract Factory
> class
> > with an object creation method called something
> like
> > newBusinessObjectInstance(). The abstract Factory
> > class also has an abstract method defined called
> > something like getBusinessObjectClass(). This
> latter
> > method is implemented by the concrete factory
> > subclasses (along with other methods), to let the
> > abstract newBusinessObjectInstance() know what
> class
> > to create.
> >
> > Since abstract methods cannot be static, I need to
> get
> > an instance of the concrete Factory subclass.
> >
> > Clear as mud?
>
> I can see your problem now. Initially I can think of
> two solutions:
>
> 1) "User-space" solution
>
> It is likely that you use the factory as a singleton
> (or at least that it
> could be used as one). In that case, the easiest
> (and most beautiful in
> terms of design ;-) solution would be combination of
> strategy
> (delegation) and singleton.
> What I mean is that the factory class itself is a
> facade consisting of
> static methods that delegate the actual creation to
> a singleton strategy
> object (e.g. FactoryImpl) which then is a normal
> object (i.e. interfaces
> and abstract classes can be used).
>
> class Factory
> {
> private static FactoryImpl impl =
> DefaultFactoryImpl();
>
> public static void setImpl(FactoryImpl newImpl)
> {
> impl = newImpl;
> }
>
> public static MyObject createMyObject()
> {
> return impl.createMyObject();
> }
> }
>
> This makes the factory implementation pluggable
> though the interfacing is
> static (thus no moving around of the factory object
> is necessary).
>
> 2) "OJB" solution
>
> Change the implementation of the factory-class stuff
> somewhat as you
> suggested:
>
> * retrieve the factory method object
> * if the method is static, simply call it
> * if not, create an object of the factory class
> (using
> Class.newInstance) and call the method on it
>
>
> Could you please have a look as to whether the first
> solution would work
> for you ?
>
> Tom
>
>
>
>
---------------------------------------------------------------------
> To unsubscribe, e-mail:
> [EMAIL PROTECTED]
> For additional commands, e-mail:
> [EMAIL PROTECTED]
>
__________________________________
Do you Yahoo!?
Yahoo! Finance: Get your refund fast by filing online.
http://taxes.yahoo.com/filing.html
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]