Solved

How to get an instance of two classes implementing an interface

Posted on 2011-09-24
7
206 Views
Last Modified: 2013-11-23
I have an interface, ReportWriter which has two subclasses, csvWriter and XmlWriter which write the report in html and XML formats respectively.

I have sample code below:

Interface ReportWriter{

public createSuccessfulRow(String msg);

public createFailureRow (String msg);

}

class HtmlWriter{
//Implementation
}

class XmlWriter{

//Implementation
}


Class ReportImpl{

//Instantiate a class of instance XmlWriter or HtmlWriter based on the Interface
}

In my class, ReportImpl, I would like to get an instance of the writer from the interface. Can I use a Enumerator?

Please let me know.

Thanks,
Prasanna

0
Comment
Question by:pkrish80
  • 3
  • 2
  • 2
7 Comments
 
LVL 47

Expert Comment

by:for_yan
ID: 36594278

I am sorry can you elaborate a little bit.

I don't see any standard class called Enmerator
(there is Enumeration, enum type, but I could not locate Enumerator)

And what is it that you want to accomplish?

Yes, you can use your interface name to specify type of your objects
If, say, you have ArrayList of objects which contains instances
of both HTMLWriter and XMLWriter, then
in ReportImpl

you can get elemenst of this ArrayList like that:

ArrayList<ReportWriter> arrayList;

ReportWriter rw = arrayList.get(0);
rw.createSuccesFullRow(message);

rw = arrayList.get(1);
rw.createSuccessfulRow(message);

and in this way have printout in different formats.

Is there some other way how you want to use this interface?



 
0
 

Author Comment

by:pkrish80
ID: 36595818
Hi for_yan,

Yes, In ReportImpl, I want to create an Instance of one of the different type of report writer. I want to know of other ways to get an instance with the Interface other than a arraylist. I wanted ideas around Using Enum type  and Enumeration.

Can I get a specific type of writer with code such as

(ReportWriter) writer = ReportWriter.getWriter(); and it returns a html or csv writer automatically? I know this might be a bit vague. Please do let me know if you have any other ideas?

Thanks

0
 
LVL 47

Expert Comment

by:for_yan
ID: 36595832



Can you explain what it is that you want to accomplish?

With arraylist, inteface and perhapse instanceof operator you should be able to do whatever you need
0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
LVL 1

Expert Comment

by:dileeph
ID: 36597858
Prasanna,

This is where the FactoryPattern comes in. There are different ways of doing this, but in essence you create a new class ReportWriterFactory. This will have the static ReportWriter getWriter(type) method.

From your ReportImpl class you will then invoke either ReportWriter.getWriter("csv") or ReportWriter.getWriter("xml"); This will then give the correct instance back. Internally the Factory class can be implemented in n number of ways - again all it does is check the type of instance needed and return either new XmlReportWriter() or new CSVReportWriter().

When I said "n" number of ways, one way would be to use an xml file to map the type to instance, you could use singleton writer instances and pre-cache them, instead of type string you can pass type enum ... so many ways.

Please let me know if you need more help.

0
 

Author Comment

by:pkrish80
ID: 36600947
How do I use type enum with in my ReportWriterFactory class? Can you throw more light on it?
0
 

Author Comment

by:pkrish80
ID: 36601028
The ReportWriterFactory class, would that be an abstract class which the csv and xml report writers would sublass?
0
 
LVL 1

Accepted Solution

by:
dileeph earned 125 total points
ID: 36707716
I am attaching a very simple example of how factory pattern can be used in your case. You can do fancy stuff like singletons and Hashmap based caches. If you go for caching please make sure your Writer instances are thread-safe.


 src.zip
0

Featured Post

Active Directory Webinar

We all know we need to protect and secure our privileges, but where to start? Join Experts Exchange and ManageEngine on Tuesday, April 11, 2017 10:00 AM PDT to learn how to track and secure privileged users in Active Directory.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Application launch issue with Apache Tomcat 5 64
Tomcat: Unable to run tomcat service. 2 23
Unhandled exception type Exception 18 42
Chrome and Firefox Java 5 51
This was posted to the Netbeans forum a Feb, 2010 and I also sent it to Verisign. Who didn't help much in my struggles to get my application signed. ------------------------- Start The idea here is to target your cell phones with the correct…
Introduction This article is the first of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article explains our test automation goals. Then rationale is given for the tools we use to a…
Viewers learn about the “for” loop and how it works in Java. By comparing it to the while loop learned before, viewers can make the transition easily. You will learn about the formatting of the for loop as we write a program that prints even numbers…
Viewers learn about the scanner class in this video and are introduced to receiving user input for their programs. Additionally, objects, conditional statements, and loops are used to help reinforce the concepts. Introduce Scanner class: Importing…

828 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question