2014-01-21 2 views
1

У меня есть пара вспомогательных классов (? extends HelperBase), которые имеют только общедоступные статические методы. Я хотел бы иметь что-то похожее на то, что фабрика (с поддержкой singleton), но поскольку нет необходимости в экземпляре, я не уверен, какой путь лучше.Фабрика для вспомогательных классов со статическими методами?

В конце концов, я хотел бы иметь что-то вроде:

enum HELPER_TYPE { 
    Type_A 
} 

abstract class HelperBase { 
    abstract void do(); 

    static HelperBase getHelper(HELPER_TYPE type) { 
    // ... 
    } 
} 

class Helper1 extends HelperBase { 
    static void doImpl() { 
    // ... impl here 
    } 

    void do() { 
     doImpl(); 
    } 
} 

// ... and then: 

HelperBase helper = HelperBase.getHelper(HELPER_TYPE.Type_A); 
helper.do(); 

Есть ли лучший способ? Любое предложение будет оценено по достоинству.

+0

Так вы просто хотите назвать 'static' метод конкретного' HelperBase' подкласса? –

+0

@Rohit Jain, да. Но я хотел бы, чтобы помощники реализовали интерфейс маркера или расширили абстрактный базовый класс. – thelost

+0

Зачем вам это нравится? –

ответ

1
enum HELPER_TYPE implements IHelper{ 
    Type_A{ 
     @Override 
     public void doSomething(){ 

     } 
    }, 
    Type_B{ 
     @Override 
     public void doSomething(){ 
     } 
    } 
} 

interface IHelper{ 
    public void doSomething(); 
} 

Как о том, интерфейс с необходимыми методами и с enum осуществить это?

Теперь у вас есть полиморфное поведение среди всех помощников, реализующих интерфейс IHelper.

Таким образом, вы можете называть их как HELPER_TYPE.Type_A.doSomething()