Текущая ситуация:
в системе Java, у нас есть класс с именем Passenger, как показано ниже, скажем,
public Class Passenger{
//lots of member fields
private String firstName ;
private String lastName ;
private WhatEverAttribute att;
//lots of getters & setters
WhatEverAttribute getAtt(){ return att;}
void setAtt(WhatEverAttribute attIn){ this.att=attIn;}
...
//and lots of methods,for example
List<String> doWhatEverFuction(...){ return ... }
...
}
И в приложении в другом месте есть много мест, которые будут создаватьи используйте этот класс как:
Passenger p1 = new Passenger();
p.setFirstName("blablabla")
p.setAtt(xxx);
Passenger p2 = new Passenger();
p2.setAtt(yyy)
List retl = p2.doWhatEverFuction(...);
...
Система, которая ранее управляла только пассажирами воздушных / полетных рейсов, поэтому класс «Пассажир» фактически является моделью данных для авиапассажиров,
Теперь проблема в том, что нам нужноЧтобы расширить модель и создать иерархию, поскольку Пассажир будет общей моделью Пассажира, содержащей общие поля и функции, новая модель AirPassenger и SeaPassenger расширят ее: введите описание изображения здесь
Таким образом, некоторые общие поля и функции будут сохранены в Passenger для совместного использования между AirPassenger и SeaPassenger, но большинство специфических полей и функций для авиапассажиров будут перенесены в AirPassenger,
, тогда все будут знать, что я должен изменить существующий коддоступ к пассажиру с
Passenger p = new Passenger();
p.xxxxxx();
до
AirPassenger p = new AirPassenger();
p.xxxxxx();
Есть так многомест, и я не хочу вручную изменять их во многих местах в существующем коде, обращающемся к Passenger из всего приложения,
Что я хочу, так это после создания иерархии, остальная часть кода все еще работает без каких-либо изменений,используя некоторые приемы техники, я мог бы вернуть AirPassenger через новый конструктор Passenger (), например:
Passenger{
Passenger(){
return Passenger("Air")
}
Passenger(String type){
Switch(type){
...
case "Air": return new AirPassenger();
...
}
}
}
, с помощью некоторых динамических функций Java, CGLIB или чего-либо еще, возможно ли это?