Cześć, mam takie klasy
public class MyFactory {
public FactoryObject factoryObject1(ObjectWithNeededData data){
return new FactoryObject (
new Cat(data), new Car(data), new Windows(data),
new House(data), new Country(data), new Salary(data)
);
}
public FactoryObject factoryObject2(ObjectWithNeededData data){
return new FactoryObject (
new Dog(data), new Plane(data), new Linux(data),
new House(data), new Country(data), new Salary(data)
);
}
--------------
public class FactoryObject {
protected MyPetInterface myPetInterface;
protected MyVehicleInterface myVehicleInterface ;
protected MyOSInterface myOsInterface;
protected MyHouseInterface ,myHouseInterface ;
protected MyCountryInterface myCountryInterface ;
protected MySalaryInterface mySalaryInterface ;
... konstruktor.
public FactoryObjectResult getFactoryObjectResult () {
return doMyJob(new FactoryObjectResult());
}
private FactoryObjectResult doMyJob(FactoryObjectResult factoryObjectResult){
factoryObjectResult = myPetInterface.modify(factoryObjectResult);
factoryObjectResult = myVehicleInterface.modify(factoryObjectResult);
factoryObjectResult = myOsInterface.modify(factoryObjectResult);
factoryObjectResult = myHouseInterface.modify(factoryObjectResult);
factoryObjectResult = myCountryInterface.modify(factoryObjectResult);
factoryObjectResult = mySalaryInterface.modify(factoryObjectResult);
return factoryObjectResult;
}
}
oczywiście tych metod w MyFactory
ma być więcej(około 50) i teraz muszę jeszcze zależnie od daty którą pobieram z ObjectWithNeededData
wrzucić w konstruktorze FactoryObject
wersje obiekty np: new Car_v2(data)
,new Car_v3(data)
,new Car_v4(data)
i nie wiem czy ogólnie wybrałem dobrą drogę, problem polega na tym że zależnie od daty muszę wybrać odpowiednią wersje implementacji obiektu, czy dało by się to jakoś lepiej zrobić niż przez jakieś ify w każdej metodzie/odzielnej fasadzie, jest to kod który dopiero powstaje więc można go zmieniać
nazwy Interfejsów i implementacji wymyślałem, nie doszukiwał bym się w nich sensu, ogólnie odpowiedzialność jest mała ale wspólna bo taki MySalaryInterface
korzysta z danych które już zostały zmodyfikowane przez np MyVehicleInterface