File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes OO, Patterns, UML and Refactoring and the fly likes Template Method/Singleton with Factory Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Engineering » OO, Patterns, UML and Refactoring
Bookmark "Template Method/Singleton with Factory" Watch "Template Method/Singleton with Factory" New topic

Template Method/Singleton with Factory

Mark Spritzler

Joined: Feb 05, 2001
Posts: 17276

I am putting together an abstract Singelton, that will then have implementing classes. These classes should only need to override one method(Hence the Template Method) so that it all works for the specific implementation type.

So I have this abstract class

And here is an implementation class

Forget about the implementation of the loadData method, it is using Hibernate to do a search for me.

But notice the static initializer.

OK, so you might guess what I am trying to do, but I am having no luck. I am just missing something that probably is pretty easy.

I am trying to make a call to getInstance of the object, and it will return the Singleton instance. Now the class that is calling getInstance is doing so through Reflection because that class only knows its type as the abstract class type.

Here is my CacheFactory that will either return an instance of that type that exists in a Map it has, or will create a new one and add it to the Map.

The problem right now is that the loadLookup method calling the getInstance static method is returning null.

I obviously want to make sure that when you call getInstance on any type of AbstractLookup and there is no instance of that type yet, that it will create one, and call loadData().

What I am oblivious to?



Perfect World Programming, LLC - iOS Apps
How to Ask Questions the Smart Way FAQ
Karthik Guru
Ranch Hand

Joined: Mar 06, 2001
Posts: 1209
I dont know if its a typo on your part but I dont see a 'static' block though in DiscountTypeLookup

Ken Blair
Ranch Hand

Joined: Jul 15, 2003
Posts: 1078
Even with it changed to a static block it won't work. The problem here is the DefaultLookup class is never loaded, the only method called belongs to AbstractLookup. Even it were loaded there's still a fatal flaw in the design: each new class loaded uses the same static variable.

I believe you'll need to create a registry or make getInstance() abstract and move the static variable to the implementing class.

Or a registry.

I agree. Here's the link:
subject: Template Method/Singleton with Factory
It's not a secret anymore!