Java Strategy Design Patterns

Strategy is a behavioural design pattern that turns a set of behaviours into objects and makes them interchangeable inside original context object. Java 8 brought the support of lambda functions, which can serve as simpler alternatives to the Strategy pattern. Here some examples of Strategy in core Java libraries: java.util.Comparator#compare() called from Collections#sort(). Examples In

Strategy is a behavioural design pattern that turns a set of behaviours into objects and makes them interchangeable inside original context object. Java 8 brought the support of lambda functions, which can serve as simpler alternatives to the Strategy pattern. Here some examples of Strategy in core Java libraries: java.util.Comparator#compare() called from Collections#sort(). Examples In

Strategy is a behavioural design pattern that turns a set of behaviours into objects and makes them interchangeable inside original context object.

Java 8 brought the support of lambda functions, which can serve as simpler alternatives to the Strategy pattern.

Here some examples of Strategy in core Java libraries:

Examples

In this example, the Strategy pattern is used to implement the various payment methods in an e-commerce application. After selecting a product to purchase, a customer picks a payment method: either Paypal or credit card.

Concrete strategies not only perform the actual payment but also alter the behavior of the checkout form, providing appropriate fields to record payment details.

Other examples it is implement various login method for users. After selecting authentication method (ie. LinkedIn, Facebook, Google) in

ContextAuthenticator context = new ContextAuthenticator(new GoogleAuthenticator());
context.login("james@gml.com", "S*s23Sd");
context.logout();    //sign in with google
context = new ContextAuthenticator(new FacebookAuthenticator());
context.login("jack@gml.com", "Jkjs23*kw");
context.logout();    //sign in with linkedIn

 

 

package Strategy;

public interface AuthenticationProvider {

    void login(String username, String password);

    void logout();
}
package Strategy;

public class ContextAuthenticator {

    private AuthenticationProvider strategy;

    ContextAuthenticator(AuthenticationProvider strategy) { this.strategy = strategy; }

    public void login(String username, String password) { strategy.login(username, password); }

    public void logout() { strategy.logout(); }

}
package Strategy;

public class FacebookAuthenticator implements AuthenticationProvider   {
    @Override
    public void login(String username, String password) {
        System.out.println("Authenticating with facebook...");
    }

    @Override
    public void logout() {
        System.out.println("Logging out with facebook...");
    }
}
package Strategy;

public class GoogleAuthenticator implements AuthenticationProvider {
    @Override
    public void login(String username, String password) {
        System.out.println("Authenticating with google...");
    }

    @Override
    public void logout() {
        System.out.println("Logging out with google...");
    }
}

Test

package Strategy;

public class Strategy {
    public static void main(String[] args) {
        //sign in with facebook
        ContextAuthenticator context = new ContextAuthenticator(new GoogleAuthenticator());
        context.login("james@gml.com", "S*s23Sd");
        context.logout();    //sign in with google
        context = new ContextAuthenticator(new FacebookAuthenticator());
        context.login("jack@gml.com", "Jkjs23*kw");
        context.logout();    //sign in with linkedIn
        context = new ContextAuthenticator(new LinkedInAuthenticator());
        context.login("dave@gml.com", "Ijks9&js@3");
        context.logout();
    }
}

Difference between abstract class and interface

Abstract class and interface both are used to achieve abstraction where we can declare the abstract methods. Abstract class and interface both can’t be instantiated.

But there are many differences between abstract class and interface that are given below.

Abstract class Interface
1 Abstract class can have abstract and non-abstract methods. Interface can have only abstract methods. Since Java 8, it can have default and static methods also.
2 Abstract class doesn’t support multiple inheritance. Interface supports multiple inheritance.
3 Abstract class can have final, non-final, static and non-static variables. Interface has only static and final variables.
4 Abstract class can provide the implementation of interface. Interface can’t provide the implementation of abstract class.
5 The abstract keyword is used to declare abstract class. The interface keyword is used to declare interface.
6 An abstract class can extend another Java class and implement multiple Java interfaces. An interface can extend another Java interface only.
7 An abstract class can be extended using keyword “extends”. An interface can be implemented using keyword “implements”.
8 A Java abstract class can have class members like private, protected, etc. Members of a Java interface are public by default.
9 Example:
public abstract class Shape{
public abstract void draw();
}
Example:
public interface Drawable{
void draw();
}
Subscribe
Notify of
guest
0 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments