SlideShare ist ein Scribd-Unternehmen logo
1 von 4
Downloaden Sie, um offline zu lesen
Solve design problems using Factory Pattern
http://idiotechie.com/?p=480                                                                      July 12, 2012


Factory design pattern is one of the most commonly used patterns in object
oriented environment. It is again from the Creational Design pattern category i.e. all
about object creation.

There are certain cases where the object creation is complex and might require some
level of abstraction so that the client code is unaware of these complexities and


                                                          ie. com
internal implementation details. There might be scenarios where object creation is
scattered and repetitive in various parts of the code.The Factory pattern resolves these issues by

                                                  ech
defining an interface which specifically creates the object but gives the flexibility to the implementation

                                               ot
classes to decide on which class to instantiate.


                                      :// idi
                              tttopdefine an interface for creating objects but
 Definition:
                            h
 The Factory method pattern is
                      ©
 delegates the object creation to the subclasses.


Objective:
Looking at the problem statement the objective should be:

        Client should be unaware of the object instantiation
        Client should access the objects through a common interface.


 Do you know?

 Factory method design pattern is commonly used in various frameworks such as
 Struts, Spring, Apache in conjunction with decorator design pattern. There are
 various J2EE patterns which are based on this Factory pattern e.g. DAO pattern.


Which principle of Object Oriented Design is used in Factory pattern?
Encapsulation : because it encapsulates the creation code from the client. And obviously you can then
think that the benefits of encapsulation are also applicable for this pattern like loose coupling and
cohesion.

Practical Example:
Consider a Garment Factory which produces various types of garments like shirt, trousers. The
consumers can request for the required types of garments through the factory. However from
consumer’s perspective they are completely unaware of who is creating this object. They just know that
the Factory is providing them the required garments.

Problem Statement:
It is a standard practice that objects are created by calling the “new” keyword. Imagine a scenario that
there are multiple cases in the client class and we call multiple new keywords for creating new objects.
if (selection.equalsIgnoreCase("Trouser")) {
return new Trouser();
  } else if (selection.equalsIgnoreCase("Shirt")) {
    return new Shirt();
  }

If we now have to add jacket or sweater we have to keep on modifying the client code and further add
the new keyword. This creates a dependency on the client code and in turn makes it difficult to
maintain.

Another problem is that the client application has to know how many types of concrete classes are

                                                            com
available upfront. Later if we have to add another concrete class e.g. sweater or jacket then client code
has to be changed and recompiled.
                                                        ie.
                                                ech
Solution:

                                             ot
To resolve above problems factory pattern can be used explicitly.

                                        idi
     The first problem of accessing too many new keyword can be resolved by using a Factory class.
                                    ://
                            h ttp
     The second problem can be solved by using an interface which the concrete classes will
     implement and the client will always point to the interface class rather than the concrete classes.
                       ©
     So in this way client will be completely unaware of various types of concrete classes which will be
     required.


 What is an interface?

 An Interfacein Java is a collection of method definitions without implementation.
 The class which implements the interface has to provides the implementation and
 must implement all the methods described in the interface. The interface is a
 contract which tells the classes what to be done leaves it for the classes to decide
 on how they can be implemented.
 interface Bounceable {
       void setBounce();
 }



The below class diagram will give a complete overview of implementation of Factory Pattern:

Let’s take a look at the sample code to implement
Let’s take a look at the sample code to implement
the Factory Pattern:


 GarmentType.java
 public interface GarmentType {
   String print();
 }




                                                    ie. com
                                           ot ech
                                  :// idi                Factory Pattern Class Diagram



 Trouser.java              h ttp
                      ©
 public class Trouser implements GarmentType {
  @Override
  public String print() {
    System.out.println("Trouser Created");
    return "Trouser";
  }

 }




 Shirt.java
 public class Shirt implements GarmentType {
   @Override
   public String print() {
     System.out.println("Shirt Created");
     return "Shirt";
   }
 }




 GarmentFactory.java
 public class GarmentFactory {
   public static GarmentType createGarments(String selection) {
     if (selection.equalsIgnoreCase("Trouser")) {
       return new Trouser();
     } else if (selection.equalsIgnoreCase("Shirt")) {
       return new Shirt();
     }
     throw new IllegalArgumentException("Selection doesnot exist");
   }
 }




 Client.java
public class Client {
   public static void main(String[] args) {
     System.out.println("Enter your selection:");
     BufferedReader br = new BufferedReader(new
 InputStreamReader(System.in));
     String selection = null;
     try {
       selection = br.readLine();
     } catch (IOException e) {
       e.printStackTrace();


                                                              com
     }
     GarmentType objGarmentType =

                                                          ie.
 GarmentFactory.createGarments(selection);


                                                  ech
     System.out.println(objGarmentType.print());
   }
 }
                                               ot
                                     :// idi
Advantage of Factory Pattern:
                             h ttp
a)This client does not need to know about the subclass of objects which requires to be created. It
                       ©
requires the reference to the interface and the factory object.
b)The object creation processes are taken away from the client to the factory and thereby decoupling
the client code with the object creation code. This in turn will help in reusability as this code can be
used by other clients.
c)The Factory pattern also helps in the scalability of the application as the client code only refers to the
interface and we can add more products implementing the interface without making many changes in
the client code.
d)Code maintainability is a beneficial if the application uses Factory pattern as the object creation is
centralized.

Weitere ähnliche Inhalte

Kürzlich hochgeladen

Kürzlich hochgeladen (20)

Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 

Empfohlen

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

Empfohlen (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Idiotechie.com solve design problems using factory pattern

  • 1. Solve design problems using Factory Pattern http://idiotechie.com/?p=480 July 12, 2012 Factory design pattern is one of the most commonly used patterns in object oriented environment. It is again from the Creational Design pattern category i.e. all about object creation. There are certain cases where the object creation is complex and might require some level of abstraction so that the client code is unaware of these complexities and ie. com internal implementation details. There might be scenarios where object creation is scattered and repetitive in various parts of the code.The Factory pattern resolves these issues by ech defining an interface which specifically creates the object but gives the flexibility to the implementation ot classes to decide on which class to instantiate. :// idi tttopdefine an interface for creating objects but Definition: h The Factory method pattern is © delegates the object creation to the subclasses. Objective: Looking at the problem statement the objective should be: Client should be unaware of the object instantiation Client should access the objects through a common interface. Do you know? Factory method design pattern is commonly used in various frameworks such as Struts, Spring, Apache in conjunction with decorator design pattern. There are various J2EE patterns which are based on this Factory pattern e.g. DAO pattern. Which principle of Object Oriented Design is used in Factory pattern? Encapsulation : because it encapsulates the creation code from the client. And obviously you can then think that the benefits of encapsulation are also applicable for this pattern like loose coupling and cohesion. Practical Example: Consider a Garment Factory which produces various types of garments like shirt, trousers. The consumers can request for the required types of garments through the factory. However from consumer’s perspective they are completely unaware of who is creating this object. They just know that the Factory is providing them the required garments. Problem Statement: It is a standard practice that objects are created by calling the “new” keyword. Imagine a scenario that there are multiple cases in the client class and we call multiple new keywords for creating new objects. if (selection.equalsIgnoreCase("Trouser")) {
  • 2. return new Trouser(); } else if (selection.equalsIgnoreCase("Shirt")) { return new Shirt(); } If we now have to add jacket or sweater we have to keep on modifying the client code and further add the new keyword. This creates a dependency on the client code and in turn makes it difficult to maintain. Another problem is that the client application has to know how many types of concrete classes are com available upfront. Later if we have to add another concrete class e.g. sweater or jacket then client code has to be changed and recompiled. ie. ech Solution: ot To resolve above problems factory pattern can be used explicitly. idi The first problem of accessing too many new keyword can be resolved by using a Factory class. :// h ttp The second problem can be solved by using an interface which the concrete classes will implement and the client will always point to the interface class rather than the concrete classes. © So in this way client will be completely unaware of various types of concrete classes which will be required. What is an interface? An Interfacein Java is a collection of method definitions without implementation. The class which implements the interface has to provides the implementation and must implement all the methods described in the interface. The interface is a contract which tells the classes what to be done leaves it for the classes to decide on how they can be implemented. interface Bounceable { void setBounce(); } The below class diagram will give a complete overview of implementation of Factory Pattern: Let’s take a look at the sample code to implement
  • 3. Let’s take a look at the sample code to implement the Factory Pattern: GarmentType.java public interface GarmentType { String print(); } ie. com ot ech :// idi Factory Pattern Class Diagram Trouser.java h ttp © public class Trouser implements GarmentType { @Override public String print() { System.out.println("Trouser Created"); return "Trouser"; } } Shirt.java public class Shirt implements GarmentType { @Override public String print() { System.out.println("Shirt Created"); return "Shirt"; } } GarmentFactory.java public class GarmentFactory { public static GarmentType createGarments(String selection) { if (selection.equalsIgnoreCase("Trouser")) { return new Trouser(); } else if (selection.equalsIgnoreCase("Shirt")) { return new Shirt(); } throw new IllegalArgumentException("Selection doesnot exist"); } } Client.java
  • 4. public class Client { public static void main(String[] args) { System.out.println("Enter your selection:"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String selection = null; try { selection = br.readLine(); } catch (IOException e) { e.printStackTrace(); com } GarmentType objGarmentType = ie. GarmentFactory.createGarments(selection); ech System.out.println(objGarmentType.print()); } } ot :// idi Advantage of Factory Pattern: h ttp a)This client does not need to know about the subclass of objects which requires to be created. It © requires the reference to the interface and the factory object. b)The object creation processes are taken away from the client to the factory and thereby decoupling the client code with the object creation code. This in turn will help in reusability as this code can be used by other clients. c)The Factory pattern also helps in the scalability of the application as the client code only refers to the interface and we can add more products implementing the interface without making many changes in the client code. d)Code maintainability is a beneficial if the application uses Factory pattern as the object creation is centralized.