Устранение двух разных классов в один в Java - PullRequest
0 голосов
/ 10 июня 2018

У меня есть интерфейс, как показано ниже

public interface ATMbusinessRule {
    public Map<String, List<ATM>> exceute(String pobCode, String plientlogo) 
            throws BuisnessRuleException;
}

У меня есть два разных класса, как показано ниже, первый

public class MaestroCardBusinessZZNFRuleImpl implements ATMbusinessRule {

    public Map<String, List<ATM>> exceute(String pobCode, String ClientId) 
            throws BuisnessRuleException {
    }
}

, а второй класс отображается как

public class MaestroCardBusinessXXNFRuleImpl implements ATMbusinessRule {

    public Map<String, List<ATM>> exceute(String pobCode, String plientlogo) 
            throws BuisnessRuleException {
    }
}

Я хочу изменить этот дизайн, так как я планирую написать простой класс, который будет содержать два разных метода, и класс вызывающего будет напрямую вызывать эти два метода и получать возвращаемое значение, но я думаю, где интерфейсбудет соответствовать этим критериям.

Пожалуйста, дайте мне знать, какие другие критерии дизайна будут лучшими

Ответы [ 3 ]

0 голосов
/ 10 июня 2018

Основная цель интерфейса - показать ваши методы, не подвергая их реализацию вызывающему коду (если это то, что вы хотите сделать здесь).Теперь, в зависимости от того, сколько методов вы хотите представить, вы можете поместить столько методов в интерфейс и иметь столько реализаций их, сколько захотите.

Если это не то, что вы намереваетесь, и вы хотите иметь простой конкретный класс, который вы можете или хотите представить в вызывающем коде, интерфейс не нужен.Просто напишите свой класс в этом случае, не реализуя никакого интерфейса.

0 голосов
/ 10 июня 2018

Вот пример, если по какой-то причине вы хотите сохранить интерфейс.Тогда это может оказать большую помощь в его расширении.Я покажу вам, как.Пожалуйста, обратите внимание, что я исправил неправильное написание слов "execute", "clientLogo" и "Business".

Интерфейс

public interface ATMbusinessRule {
    public Map<String, List<ATM>> execute(String pobCode, String ClientId, String clientLogo) throws BusinessRuleException;
}

Класс

public class MaestroCardBusinessRuleImpl implements ATMbusinessRule {

    public Map<String, List<ATM>> executeRule(String pobCode, String clientId,  String clientLogo) throws BuisnessRuleException {

         if(clientId != null) {
             executeZZNRule(String pobCode, String clientId);
         } else {
             executeXXNFRule(String pobCode, String clientLogo);
         }

    }

    private Map<String, List<ATM>> executeZZNRule(String pobCode, String clientId) throws BuisnessRuleException {
        // concrete ZZN implementation here        
    }

    private Map<String, List<ATM>> executeXXNFRule(String pobCode, String clientLogo) throws BuisnessRuleException {
        // concrete XXNF implementation here        
    }

}

Теперь вам просто нужно позвонить

maestroCardBusinessRuleImpl.execute(pobCode, clientId, null);

или

maestroCardBusinessRuleImpl.execute(pobCode, null, clientLogo);
0 голосов
/ 10 июня 2018

Почему бы не использовать один класс без интерфейса ...

public class MaestroCardBusiness {
    public Map<String, List<ATM>> exceuteZZNFRule(String pobCode, String ClientId) 
            throws BuisnessRuleException {
    }
    public Map<String, List<ATM>> exceuteXXNFRule(String pobCode, String plientlogo) 
            throws BuisnessRuleException {
    }
}

Если вам нужен интерфейс, то было бы невозможно иметь один класс с двумя реализациями методов, которые отличаются только своим списком параметров.Код, который у вас уже есть, в порядке.Но если вы настаиваете на наличии одного класса, то приведенного выше кода достаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...