Должен ли я создать список объектов или изменить свой интерфейс? - PullRequest
0 голосов
/ 12 января 2020

У меня есть 3 класса, которые реализуют следующий интерфейс:

public interface PolicyType {
    public boolean isValid();
    public void displayTemplate();
}

И в моем основном я создал и инициализировал 1 экземпляр каждого класса:

//the same method exists for MedicalPolicy and MotorPolicy
private static void displaySucMsg(TravelPolicy travelPolicy,List<TravelPolicy> travelPolicyList){
        if(travelPolicy.isValid()) {
            System.out.println("Policy: " + travelPolicy.getPolicyNo() + " was added successfully");
            travelPolicyList.add(travelPolicy);
        }
}

public static void main(String[] args){
        List<TravelPolicy> travelPolicyList = new ArrayList<TravelPolicy>(2);
        List<MotorPolicy> motorPolicyList = new ArrayList<MotorPolicy>(2);
        List<MedicalPolicy> medicalPolicyList = new ArrayList<MedicalPolicy>(2);

        TravelPolicy travelPolicy1 = new TravelPolicy(policyNo,param2,etc...);

        displaySucMsg(travelPolicy1,travelPolicyList);

        MotorPolicy motorPolicy = new MotorPolicy(policyNo,param2,etc...);

        displaySucMsg(motorPolicy,motorPolicyList);

        MedicalPolicy medicalPolicy = new MedicalPolicy(policyNo,param2,etc...);

        displaySucMsg(medicalPolicy,medicalPolicyList);
    }

Как вы можете видеть Я создал 3 List s каждый для class, но я хочу иметь 1 List, чтобы в конце я мог использовать for loop, моя проблема в том, что displaySucMsg использует Метод получения для поля policyNo (а затем добавить экземпляр в соответствующий список), поэтому я не могу создать List из PolicyType и добавить в него все экземпляры.

Мой вопрос должен Я создаю List из Object (что, я полагаю, было бы плохой практикой) и добавляю в него все 3 List s, или я должен добавить public String getPolicyNo() к своему интерфейсу, поскольку все мои 3 класса имеют этот метод ( что я тоже считаю плохой практикой, так как если я когда-либо создаю новый класс, который реализует PolicyType, но не нуждается в методе getPolicyNo(), это очень плохо), или я должен просто оставить свой код как есть и запустить 1 for loop на каждом List или есть другое решение?

1 Ответ

1 голос
/ 12 января 2020

Дизайн класса должен отражать реальный бизнес-сценарий. Итак, определите, что такое «политика» и каковы ее обязательные свойства и поведение этого объекта. Если policyNo и policyType являются важными свойствами, не беспокойтесь о том, что они никогда не будут пустыми.

Если случается, что свойство считается обязательным, но с изменением бизнес-сценария это уже не тот случай, тогда вы всегда можете реализовать его и вернуть значение по умолчанию или фактически иметь реализацию по умолчанию в интерфейсе. Вы даже можете использовать 2 интерфейса - OldPolicy и NewPolicy, чтобы учесть изменение определения «policy».

В вашем примере добавьте getPolicyNo() к интерфейсу PolicyType и создайте список, который может содержать объекты из 3 типы политики.

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