在java中将两个不同的类消除为一个

时间:2018-06-10 17:02:30

标签: java design-patterns

我有一个如下所示的界面

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 :(得分:1)

为什么不使用没有接口的一个类...

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 {
    }
}

如果你想要接口,那么就不可能有一个具有2个方法实现的类,它们的区别仅在于它的参数列表。你已经拥有的代码是好的。但如果你坚持单一课程,那么上面的代码就足够了。

答案 1 :(得分:0)

接口的基本目的是公开您的方法,而不将其实现暴露给调用代码(如果这是您要在此处执行的操作)。现在,根据您要公开的方法数量,您可以在界面中放置许多方法,并根据需要实现多个方法。

如果这不是您想要的,并且您希望有一个简单的具体类,您可以或想要向调用代码公开,则不需要接口。只需在这种情况下编写您的类,而无需实现任何接口。

答案 2 :(得分:0)

以下是一个示例,如果由于某种原因,您想保留界面。 然后扩展它可能会有很大帮助。我会告诉你如何。 请注意,我更正了“执行”,“clientLogo”和“商业”的拼写错误。

<强>接口

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);