SlideShare une entreprise Scribd logo
1  sur  25
Slide 1




Java Design Pattern
Strategy Pattern


                   Swapnal Agrawal
                   Module Lead

                   Ganesh Kolhe
                   Senior Team Lead
Slide 2




Outline
 Overview
 Analysis and Design
 Module and Client Implementation
 Strategy
 Variation in the Implementation
 Java API Usage
 Consequences
Slide 3




Overview
 Using different algorithms on some values such as sorting, filters,
  etc.


 Applying some logic or calculation to return a value to the client.


 Implementing the algorithms in such a way that the correct
  algorithm is provided from different available algorithms on the
  client's request and the required value to the client is returned.
Slide 4




Analysis and Design
 There are many solutions and alternatives which seem to be very
  simple and straightforward. Following are two such examples:


    Separate implementation logic from
      client code.


    Create a static class with a method
      and if-else or switch case ladder can
      be used to fetch different algorithms.
Slide 5




Module Implementation
public final class Compute {
       public static final int COMPUTE_SUM= 1;
       public static final int COMPUTE_PRODUCT= 2;

      private Compute() {}

       public static double getComputedValue(int type, double
a , double b){
              if (type == COMPUTE_SUM){
                     return a + b;
              }else if (type == COMPUTE_PRODUCT){
                     return a * b;
              }
              throw new IllegalArgumentException();
       }
}
Slide 6




Client Implementation
public class ApplicationClient {
      public static void main(String[] args) {
             System.out.println("Sum = "+
                   Compute.getComputedValue(
                   Compute.COMPUTE_SUM, 20, 25));


             System.out.println("Product = "+
                   Compute.getComputedValue(
                   Compute.COMPUTE_PRODUCT, 7, 3));
      }
}
Slide 7




The Design



             Easy Testing

                                       Code Reuse
                            Easy
                         Maintenance

               Easy
             Expansion
Slide 8




The Strategy
Design Pattern Type: Behavioral
Idea: Algorithm
Alias: Policy

A class defines many behaviors and these appear as multiple conditional
statements in its operations. Instead of many conditionals, move related
conditional branches into their own Strategy class.
Strategy pattern defines family of algorithms, encapsulates each one, and
makes them interchangeable.
 Strategy lets algorithms vary independently from clients that use them.
   Calculations are based on the clients’ abstraction (not using the clients’
   implementation or global data).
Slide 9




Strategy Implementation
 Define a Strategy Interface that is common to all supported
   algorithms.


 Strategy Interface defines your Strategy Object’s behavior.


 Implement the Concrete Strategy classes that share the common
   Strategy interface.
Slide 10




The Class Diagram

    Client


                            <<interface>>
                         IComputeStrategy
                          -----------------------
                              Operation()




             Concrete         Concrete               Concrete
             Strategy1        Strategy2             Strategy…n
Slide 11




Module Implementation By Using Strategy
public interface IComputeStrategy01 {
       public double getValue(double a, double b);
}

public class ComputeSum01 implements IComputeStrategy01 {
       public double getValue(double a, double b) {
              return a + b;
       }
}

public class ComputeProduct01 implements IComputeStrategy01 {
       public double getValue(double a, double b) {
              return a * b;
       }
}
Slide 12




Client Code Using the Implementation
public class StrategyApplicationClient01 {
       public static void main(String[] args) {

      IComputeStrategy01 compute1 = new ComputeSum01();
      System.out.println("Sum = "+
             compute1.getValue(20, 25));

      IComputeStrategy01 compute2 = new ComputeProduct02();
      System.out.println("Product = "+
             compute2.getValue(7, 3));
      }
}
Slide 13




The Strategy Design



            Easy Testing

                                      Code Reuse
                           Easy
                        Maintenance

              Easy
            Expansion
Slide 14




Variation In The Implementation
 Singleton:

    Concrete classes as singleton objects.


    Define a static method to get a singleton instance.
Slide 15




Strategy Implementation By Using Singleton
//singleton implementation
public final class ComputeSum02 implements IComputeStrategy02
{

private static ComputeSum02 computeSum = new ComputeSum02();

private ComputeSum02(){}

public static IComputeStrategy02 getOnlyOneInstance(){
return computeSum;
}

public double getValue(double a, double b) {
return a + b;
}
}
Slide 16




Client - Strategy Implementation By Using Singleton
public class StrategyApplicationClient02 {
       public static void main(String[] args) {

             IComputeStrategy02 compute1 =
                    ComputeSum02.getOnlyOneInstance();
             System.out.println("Sum = "+
                    compute1.getValue(20, 25));

             IComputeStrategy02 compute2 =
                     ComputeProduct02.getOnlyOneInstance();
             System.out.println(“Product= "+
                    compute2.getValue(7, 3));
      }
}
Slide 17




Another Variation In the Implementation
Context:
   is configured with a Concrete Strategy object.
   maintains a private reference to a Strategy object.

   may define an interface that lets Strategy access its data.



  By changing the Context's Strategy, different behaviors can be
     obtained.
Slide 18




Strategy Implementation By Using Context
public interface IComputeStrategy03 {
        public double getValue(double a, double b);
}
//strategy context implementation
public class StrategyContext03 {
        private IComputeStrategy03 computeStrategy;
        public StrategyContext03 (IComputeStrategy03 computeStrategy){
                this.computeStrategy = computeStrategy;
        }
        public void setComputeStrategy(IComputeStrategy03
computeStrategy){
                this.computeStrategy = computeStrategy;
        }
        public double executeComputeStrategy(double a , double b){
                return computeStrategy.getValue(a, b);
        }
}
Slide 19




Client - Strategy Implementation By Using Context
public class StrategyApplicationClient03 {
 public static void main(String[] args) {

      StrategyContext03 ctx = new StrategyContext03(
             ComputeSum03.getOnlyOneInstance());
      System.out.println("Sum = "+
             ctx.executeComputeStrategy(20, 25));

      ctx.setComputeStratey(
             ComputeProduct03.getOnlyOneInstance());
      System.out.println("Product = "+
      ctx.executeComputeStrategy(7, 3));
      }
}
Slide 20




The Class Diagram

    Client               Context


                                      <<interface>>
                                   IComputeStrategy
                                    -----------------------
                                        Operation()




                    Concrete            Concrete               Concrete
                    Strategy1           Strategy2             Strategy…n
Slide 21




Java API Usage

                                 checkInputStream and checkOutputStream uses the
Java.util.zip
                                 strategy pattern to compute checksums on byte stream.


                                 compare(), executed by among
Java.util.comparator
                                 others Collections#sort().


                                 the service() and all doXXX() methods take
                                 HttpServletRequest and HttpServletResponse and the
Javax.servlet.http.HttpServlet
                                 implementor has to process them (and not to get hold
                                 of them as instance variables!).
Slide 22




Consequences
 Benefits
   Provides an alternative to sub classing the Context class to get a variety
    of algorithms or behaviors.
   Eliminates large conditional statements.

   Provides a choice of implementations for the same behavior.



 Shortcomings
   Increases the number of objects.

   All algorithms must use the same Strategy interface.



  Think twice before implementing the Strategy pattern or any other design
     pattern to match your requirements.
Slide 23




About Cross Country Infotech
Cross Country Infotech (CCI) Pvt. Ltd. is a part of the Cross Country Healthcare (NYSE:
CCRN) group of companies. CCI specializes in providing a gamut of IT/ITES services and
is well equipped with technical expertise to provide smarter solutions to its customers.
Some of our cutting-edge technology offerings include Mobile, Web and BI Application
Development; ECM and Informix 4GL Solutions; and Technical Documentation, UI
Design and Testing services.
Slide 24




References
  http://paginas.fe.up.pt/~aaguiar/as/gof/hires/pat5i.htm

  http://www.oodesign.com/strategy-pattern.html
Slide 25




Thank You!

Contenu connexe

Tendances (20)

Java Collections Framework
Java Collections FrameworkJava Collections Framework
Java Collections Framework
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - Core
 
Introduction to struts
Introduction to strutsIntroduction to struts
Introduction to struts
 
Java Applet
Java AppletJava Applet
Java Applet
 
JAVA AWT
JAVA AWTJAVA AWT
JAVA AWT
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Factory Design Pattern
Factory Design PatternFactory Design Pattern
Factory Design Pattern
 
Spring Boot Tutorial
Spring Boot TutorialSpring Boot Tutorial
Spring Boot Tutorial
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
java 8 new features
java 8 new features java 8 new features
java 8 new features
 
Spring Web MVC
Spring Web MVCSpring Web MVC
Spring Web MVC
 
Spring User Guide
Spring User GuideSpring User Guide
Spring User Guide
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
Java: Regular Expression
Java: Regular ExpressionJava: Regular Expression
Java: Regular Expression
 
Builder pattern
Builder patternBuilder pattern
Builder pattern
 
Interfaces and abstract classes
Interfaces and abstract classesInterfaces and abstract classes
Interfaces and abstract classes
 
Java awt
Java awtJava awt
Java awt
 
Spring Boot in Action
Spring Boot in Action Spring Boot in Action
Spring Boot in Action
 
The State Design Pattern
The State Design PatternThe State Design Pattern
The State Design Pattern
 
Introduction to spring boot
Introduction to spring bootIntroduction to spring boot
Introduction to spring boot
 

Similaire à Strategy Design Pattern

Strategy design pattern
Strategy design pattern Strategy design pattern
Strategy design pattern aswapnal
 
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014First Tuesday Bergen
 
Java programming concept
Java programming conceptJava programming concept
Java programming conceptSanjay Gunjal
 
31b - JUnit and Mockito.pdf
31b - JUnit and Mockito.pdf31b - JUnit and Mockito.pdf
31b - JUnit and Mockito.pdfgauravavam
 
Guice tutorial
Guice tutorialGuice tutorial
Guice tutorialAnh Quân
 
Quickly Testing Qt Desktop Applications
Quickly Testing Qt Desktop ApplicationsQuickly Testing Qt Desktop Applications
Quickly Testing Qt Desktop ApplicationsClare Macrae
 
Exploring CameraX from JetPack
Exploring CameraX from JetPackExploring CameraX from JetPack
Exploring CameraX from JetPackHassan Abid
 
Unit Testing Using Mockito in Android (1).pdf
Unit Testing Using Mockito in Android (1).pdfUnit Testing Using Mockito in Android (1).pdf
Unit Testing Using Mockito in Android (1).pdfKaty Slemon
 
The real beginner's guide to android testing
The real beginner's guide to android testingThe real beginner's guide to android testing
The real beginner's guide to android testingEric (Trung Dung) Nguyen
 
Qt for beginners part 4 doing more
Qt for beginners part 4   doing moreQt for beginners part 4   doing more
Qt for beginners part 4 doing moreICS
 
Guide to Generate Extent Report in Kotlin
Guide to Generate Extent Report in KotlinGuide to Generate Extent Report in Kotlin
Guide to Generate Extent Report in KotlinRapidValue
 
Factory method & strategy pattern
Factory method & strategy patternFactory method & strategy pattern
Factory method & strategy patternbabak danyal
 
RL2 Dot Brighton
RL2 Dot BrightonRL2 Dot Brighton
RL2 Dot BrightonShaun Smith
 
Software System Architecture-Lecture 6.pptx
Software System Architecture-Lecture 6.pptxSoftware System Architecture-Lecture 6.pptx
Software System Architecture-Lecture 6.pptxssuser9a23691
 
C# Tutorial MSM_Murach chapter-15-slides
C# Tutorial MSM_Murach chapter-15-slidesC# Tutorial MSM_Murach chapter-15-slides
C# Tutorial MSM_Murach chapter-15-slidesSami Mut
 
cscript_controller.pdf
cscript_controller.pdfcscript_controller.pdf
cscript_controller.pdfVcTrn1
 

Similaire à Strategy Design Pattern (20)

Strategy design pattern
Strategy design pattern Strategy design pattern
Strategy design pattern
 
Dependency Injection for Android
Dependency Injection for AndroidDependency Injection for Android
Dependency Injection for Android
 
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014
 
Java programming concept
Java programming conceptJava programming concept
Java programming concept
 
31b - JUnit and Mockito.pdf
31b - JUnit and Mockito.pdf31b - JUnit and Mockito.pdf
31b - JUnit and Mockito.pdf
 
Google GIN
Google GINGoogle GIN
Google GIN
 
Guice tutorial
Guice tutorialGuice tutorial
Guice tutorial
 
Quickly Testing Qt Desktop Applications
Quickly Testing Qt Desktop ApplicationsQuickly Testing Qt Desktop Applications
Quickly Testing Qt Desktop Applications
 
Exploring CameraX from JetPack
Exploring CameraX from JetPackExploring CameraX from JetPack
Exploring CameraX from JetPack
 
Unit Testing Using Mockito in Android (1).pdf
Unit Testing Using Mockito in Android (1).pdfUnit Testing Using Mockito in Android (1).pdf
Unit Testing Using Mockito in Android (1).pdf
 
The real beginner's guide to android testing
The real beginner's guide to android testingThe real beginner's guide to android testing
The real beginner's guide to android testing
 
Qt for beginners part 4 doing more
Qt for beginners part 4   doing moreQt for beginners part 4   doing more
Qt for beginners part 4 doing more
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Guide to Generate Extent Report in Kotlin
Guide to Generate Extent Report in KotlinGuide to Generate Extent Report in Kotlin
Guide to Generate Extent Report in Kotlin
 
Factory method & strategy pattern
Factory method & strategy patternFactory method & strategy pattern
Factory method & strategy pattern
 
Mvc acchitecture
Mvc acchitectureMvc acchitecture
Mvc acchitecture
 
RL2 Dot Brighton
RL2 Dot BrightonRL2 Dot Brighton
RL2 Dot Brighton
 
Software System Architecture-Lecture 6.pptx
Software System Architecture-Lecture 6.pptxSoftware System Architecture-Lecture 6.pptx
Software System Architecture-Lecture 6.pptx
 
C# Tutorial MSM_Murach chapter-15-slides
C# Tutorial MSM_Murach chapter-15-slidesC# Tutorial MSM_Murach chapter-15-slides
C# Tutorial MSM_Murach chapter-15-slides
 
cscript_controller.pdf
cscript_controller.pdfcscript_controller.pdf
cscript_controller.pdf
 

Dernier

Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024The Digital Insurer
 
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)wesley chun
 
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.pdfUK Journal
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
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 organizationRadu Cotescu
 
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...Martijn de Jong
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Principled Technologies
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024SynarionITSolutions
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
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 WorkerThousandEyes
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
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...apidays
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
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 FresherRemote DBA Services
 

Dernier (20)

Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 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
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
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
 
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...
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
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
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
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...
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
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
 

Strategy Design Pattern

  • 1. Slide 1 Java Design Pattern Strategy Pattern Swapnal Agrawal Module Lead Ganesh Kolhe Senior Team Lead
  • 2. Slide 2 Outline  Overview  Analysis and Design  Module and Client Implementation  Strategy  Variation in the Implementation  Java API Usage  Consequences
  • 3. Slide 3 Overview  Using different algorithms on some values such as sorting, filters, etc.  Applying some logic or calculation to return a value to the client.  Implementing the algorithms in such a way that the correct algorithm is provided from different available algorithms on the client's request and the required value to the client is returned.
  • 4. Slide 4 Analysis and Design  There are many solutions and alternatives which seem to be very simple and straightforward. Following are two such examples:  Separate implementation logic from client code.  Create a static class with a method and if-else or switch case ladder can be used to fetch different algorithms.
  • 5. Slide 5 Module Implementation public final class Compute { public static final int COMPUTE_SUM= 1; public static final int COMPUTE_PRODUCT= 2; private Compute() {} public static double getComputedValue(int type, double a , double b){ if (type == COMPUTE_SUM){ return a + b; }else if (type == COMPUTE_PRODUCT){ return a * b; } throw new IllegalArgumentException(); } }
  • 6. Slide 6 Client Implementation public class ApplicationClient { public static void main(String[] args) { System.out.println("Sum = "+ Compute.getComputedValue( Compute.COMPUTE_SUM, 20, 25)); System.out.println("Product = "+ Compute.getComputedValue( Compute.COMPUTE_PRODUCT, 7, 3)); } }
  • 7. Slide 7 The Design Easy Testing Code Reuse Easy Maintenance Easy Expansion
  • 8. Slide 8 The Strategy Design Pattern Type: Behavioral Idea: Algorithm Alias: Policy A class defines many behaviors and these appear as multiple conditional statements in its operations. Instead of many conditionals, move related conditional branches into their own Strategy class. Strategy pattern defines family of algorithms, encapsulates each one, and makes them interchangeable.  Strategy lets algorithms vary independently from clients that use them. Calculations are based on the clients’ abstraction (not using the clients’ implementation or global data).
  • 9. Slide 9 Strategy Implementation  Define a Strategy Interface that is common to all supported algorithms.  Strategy Interface defines your Strategy Object’s behavior.  Implement the Concrete Strategy classes that share the common Strategy interface.
  • 10. Slide 10 The Class Diagram Client <<interface>> IComputeStrategy ----------------------- Operation() Concrete Concrete Concrete Strategy1 Strategy2 Strategy…n
  • 11. Slide 11 Module Implementation By Using Strategy public interface IComputeStrategy01 { public double getValue(double a, double b); } public class ComputeSum01 implements IComputeStrategy01 { public double getValue(double a, double b) { return a + b; } } public class ComputeProduct01 implements IComputeStrategy01 { public double getValue(double a, double b) { return a * b; } }
  • 12. Slide 12 Client Code Using the Implementation public class StrategyApplicationClient01 { public static void main(String[] args) { IComputeStrategy01 compute1 = new ComputeSum01(); System.out.println("Sum = "+ compute1.getValue(20, 25)); IComputeStrategy01 compute2 = new ComputeProduct02(); System.out.println("Product = "+ compute2.getValue(7, 3)); } }
  • 13. Slide 13 The Strategy Design Easy Testing Code Reuse Easy Maintenance Easy Expansion
  • 14. Slide 14 Variation In The Implementation  Singleton:  Concrete classes as singleton objects.  Define a static method to get a singleton instance.
  • 15. Slide 15 Strategy Implementation By Using Singleton //singleton implementation public final class ComputeSum02 implements IComputeStrategy02 { private static ComputeSum02 computeSum = new ComputeSum02(); private ComputeSum02(){} public static IComputeStrategy02 getOnlyOneInstance(){ return computeSum; } public double getValue(double a, double b) { return a + b; } }
  • 16. Slide 16 Client - Strategy Implementation By Using Singleton public class StrategyApplicationClient02 { public static void main(String[] args) { IComputeStrategy02 compute1 = ComputeSum02.getOnlyOneInstance(); System.out.println("Sum = "+ compute1.getValue(20, 25)); IComputeStrategy02 compute2 = ComputeProduct02.getOnlyOneInstance(); System.out.println(“Product= "+ compute2.getValue(7, 3)); } }
  • 17. Slide 17 Another Variation In the Implementation Context:  is configured with a Concrete Strategy object.  maintains a private reference to a Strategy object.  may define an interface that lets Strategy access its data. By changing the Context's Strategy, different behaviors can be obtained.
  • 18. Slide 18 Strategy Implementation By Using Context public interface IComputeStrategy03 { public double getValue(double a, double b); } //strategy context implementation public class StrategyContext03 { private IComputeStrategy03 computeStrategy; public StrategyContext03 (IComputeStrategy03 computeStrategy){ this.computeStrategy = computeStrategy; } public void setComputeStrategy(IComputeStrategy03 computeStrategy){ this.computeStrategy = computeStrategy; } public double executeComputeStrategy(double a , double b){ return computeStrategy.getValue(a, b); } }
  • 19. Slide 19 Client - Strategy Implementation By Using Context public class StrategyApplicationClient03 { public static void main(String[] args) { StrategyContext03 ctx = new StrategyContext03( ComputeSum03.getOnlyOneInstance()); System.out.println("Sum = "+ ctx.executeComputeStrategy(20, 25)); ctx.setComputeStratey( ComputeProduct03.getOnlyOneInstance()); System.out.println("Product = "+ ctx.executeComputeStrategy(7, 3)); } }
  • 20. Slide 20 The Class Diagram Client Context <<interface>> IComputeStrategy ----------------------- Operation() Concrete Concrete Concrete Strategy1 Strategy2 Strategy…n
  • 21. Slide 21 Java API Usage checkInputStream and checkOutputStream uses the Java.util.zip strategy pattern to compute checksums on byte stream. compare(), executed by among Java.util.comparator others Collections#sort(). the service() and all doXXX() methods take HttpServletRequest and HttpServletResponse and the Javax.servlet.http.HttpServlet implementor has to process them (and not to get hold of them as instance variables!).
  • 22. Slide 22 Consequences  Benefits  Provides an alternative to sub classing the Context class to get a variety of algorithms or behaviors.  Eliminates large conditional statements.  Provides a choice of implementations for the same behavior.  Shortcomings  Increases the number of objects.  All algorithms must use the same Strategy interface. Think twice before implementing the Strategy pattern or any other design pattern to match your requirements.
  • 23. Slide 23 About Cross Country Infotech Cross Country Infotech (CCI) Pvt. Ltd. is a part of the Cross Country Healthcare (NYSE: CCRN) group of companies. CCI specializes in providing a gamut of IT/ITES services and is well equipped with technical expertise to provide smarter solutions to its customers. Some of our cutting-edge technology offerings include Mobile, Web and BI Application Development; ECM and Informix 4GL Solutions; and Technical Documentation, UI Design and Testing services.
  • 24. Slide 24 References  http://paginas.fe.up.pt/~aaguiar/as/gof/hires/pat5i.htm  http://www.oodesign.com/strategy-pattern.html

Notes de l'éditeur

  1. Project Name
  2. Project Name
  3. Project Name