Java factory, но объекты имеют несколько разные атрибуты - PullRequest
0 голосов
/ 18 июня 2020

Я хочу запрограммировать фабрику, которая создает два типа людей: «Сотрудник» и «Предприниматель». Оба они используют одни и те же базовые c атрибуты «Person», но они также реализуют свои уникальные атрибуты.
Проблема в том, что если я хочу вернуть метод или атрибут, который не объявлен в абстрактном классе «Person», программа не находит его (поскольку, очевидно, я создаю объект типа «Человек», а не конкретно «Сотрудник» или «Предприниматель»).
Как мне решить эту проблему?

Это демонстрационный класс

public class Demo{
    public static void main(String[] args){
        PersonFactory pf = new PersonFactory();
        Person p1 = pf.getPerson("Employee");
        p1.presentation();

        System.out.println(p1.getComplanyName());

    }
}

Это абстрактный класс

public abstract class Person{

    String name;
    String surname;

    abstract void presentation();

}  

Это два конкретных класса, которые расширяют Person

public class Entre extends Person{

    int licenseNumber;

    @Override
    public void presentation(){
        System.out.println("hi i'm an Entrepreneur");
    }

    public int licenseNumber(){
        return licenseNumber;
    }
}



public class Empl extends Person{

    String companyName;

    @Override
    public void presentation(){
        System.out.println("hi i'm an employee");
    }

    public String getCompanyName(){
        return companyName;
    }
}  

Наконец завод

public class PersonFactory{

    public Person getPerson(String type){
        if(type.equalsIgnoreCase("ENTREPRENEUR")){
            return new Entre();
        }
        else if(type.equalsIgnoreCase("Employee")){
            return new Empl();
        }
        return null;
    }
}
...