PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Friday, November 25, 2022

[FIXED] How to implement factory pattern with dagger using annotation

 November 25, 2022     dagger, design-patterns, factory, java, module     No comments   

Issue

What I have done currently is

Created an abstract class

public interface AbstractRawPathStrategy {
    String getRouteKey();

    void processRequest();
}

Implemented the classes

public class GetDocumentImpl implements AbstractRawPathStrategy {
    @Override
    public String getRouteKey() {
        return "GET_DOCUMENT";
    }

    @Override
    public void processRequest() {
        log.info("Inside get document");
    }
}

Created a routing factory

public class RawPathStrategyFactory {
    private final Map<String, AbstractRawPathStrategy> dictionary;

    @Inject
    public RawPathStrategyFactory(final Set<AbstractRawPathStrategy> abstractRawPathStrategySet) {
        dictionary = new HashMap<>();
        for (AbstractRawPathStrategy abstractRawPathStrategy : abstractRawPathStrategySet) {
            dictionary.put(abstractRawPathStrategy.getRouteKey(), abstractRawPathStrategy);
        }
    }

   
    public AbstractRawPathStrategy getByRouteKey(final String rawPath) {
        return dictionary.get(rawPath);
    }
}

Instantiated the factory

@Module
public class AppModule {
    @Provides
    @Singleton
    public RawPathStrategyFactory getRouteKeyStrategyFactory() {
        Set<AbstractRawPathStrategy> abstractRouteKeyStrategies = new HashSet<>();
        abstractRouteKeyStrategies.add(new GetDocumentImpl());
        abstractRouteKeyStrategies.add(new GetUserRightsImpl());
        return new RawPathStrategyFactory(abstractRouteKeyStrategies);
    }

What I want is to go to respective class based on the route key (String). How can this be done without instantiating each class with new in AppModule. Any cleaner way to do this?


Solution

Try to use multibindings when create RawPathStrategyFactory https://dagger.dev/dev-guide/multibindings.html



Answered By - Oleg Maksymuk
Answer Checked By - Robin (PHPFixing Admin)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing