vendredi 17 janvier 2020

Java - how to call a method of corresponding class based on string using enum/factory pattern

Yes, I read many examples in web, but I didn't find a way how to call a method based on string value. May be I am not searching in right way... I wrote all code, but don't know how to call the method. fyi: I don't want to use if else or switch case

Here is what I want: I get the card reader type as String from database. I have to call the corresponding class' method.

My code:

LoginPanel.java

public class LoginPanel {
    public static void main(String args[]) {

        String readerType = "Omnikey5427-CK"; // I get this ("Omnikey5427-CK" or "Omnikey5427-G2") from a database as String 

        // I WANT TO CALL getCardNumber() method of respective class


    }
}

ISmartCardReader.java

public interface ISmartCardReader {

    public Integer getCardNumber();

}

Omnikey5427G2.java

public class Omnikey5427G2 implements ISmartCardReader {

    public Omnikey5427G2() {
        System.out.println("G222222222222222...");
    }

    public Integer getCardNumber() {
        return 222;
    }
}

Omnikey5427CK.java

public class Omnikey5427CK implements ISmartCardReader {

    public Omnikey5427CK() {
        System.out.println("CKKKKKKKKKKKKKKK...");
    }

    public Integer getCardNumber() {
        return 111;
    }
}

SmacrtCardEnumFactory.java

public enum SmacrtCardEnumFactory {

    OMNIKEY5427CK("Omnikey5427-CK") {
        public ISmartCardReader geInstance() {
            return new Omnikey5427CK();
        }
    },
    OMNIKEY5427G2("Omnikey5427-G2") {
        public ISmartCardReader geInstance() {
            return new Omnikey5427G2();
        }
    };

    private String cardReaderName;

    private SmacrtCardEnumFactory(String cardReaderName) {
        this.cardReaderName = cardReaderName;
    }

    public String cardReaderName() {
        return cardReaderName;
    }

}

Aucun commentaire:

Enregistrer un commentaire