Эй, так что я пытался понять шаблон Factory, когда следующий придумал:Factory Pattern - метод назначается объекту
public abstract class SoftwareShop {
public OfficeProgramm holeApp(String zuHolendesProg) {
//Delegation der Objekterstellung an Subklasse
OfficeProgramm programm = createOfficeProgram(zuHolendesProg);
//weitere verarbeitung
programm.einpacken();
programm.etikettieren();
return programm;
}
//Definition der Factory Method
protected abstract OfficeProgramm createOfficeProgram(String zuHolendesProg);
}
class MicrosoftOfficeFactory extends SoftwareShop{
@Override
protected OfficeProgramm createOfficeProgram(String zuHolendesProg) {
OfficeProgramm programm = null;
if (zuHolendesProg.equals("Textverarbeitung")) {
programm = new Word();
}
else if (zuHolendesProg.equals("Präsentation")) {
programm = new Powerpoint();
}
else if (zuHolendesProg.equals("Tabellenkalkulation")) {
programm = new Excel();
}
else {
System.err.println("Ungültig!");
}
return programm;
}
}
Что я не понимаю, об этом так: OfficeProgramm programm = createOfficeProgram(zuHolendesProg);
Почему объектная программа может быть назначена методу creatOfficeProgram (string param)? Разве я не знаю ничего важного в отношении проклятой вещи? Или это потому, что оно абстрактно в классе SoftwareShop? Я просто не знаю, почему это работает, а не object.createOfficeProgramm или что-то еще ... может быть, кто-то может помочь!
Программному объекту присваивается значение, возвращаемое функцией createOfficeProgram, которая создает объекты OfficeProgramm – dahui
Чтобы расширить то, что сказал дахуи, 'OfficeProgramm program = createOfficeProgram (prog);' не присваивает _method_ "createOfficeProgram" переменной var скорее, он назначает _результат call_ 'createOfficeProgram (prog)', который действительно возвращает объект «OfficeProgramm», поэтому назначение OfficeProgramm в var типа OfficeProgramm не представляет проблемы. –
, но если я правильно помню, абстрактные методы не могут быть вызваны. Вместо этого вызываются методы в подклассах. Что здесь называется? Нет classxy.createOfficeProgram(), это просто creatOffProgram() ... почему он вызывает метод в правильном классе? это не имеет никакого смысла для меня :( – Mreifenberger