【发布时间】:2016-11-19 01:10:44
【问题描述】:
嘿,当出现以下情况时,我正试图理解工厂模式:
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对象
-
为了扩展大辉所说的,
OfficeProgramm programm = createOfficeProgram(prog);不是将 method "createOfficeProgram" 分配给名为 programm 的 var,而是分配调用的 结果createOfficeProgram(prog)确实返回了一个OfficeProgramm对象,因此将 OfficeProgramm 分配给 OfficeProgramm 类型的 var 没有问题。 -
但如果我没记错的话,抽象方法不能被调用。而是调用子类中的方法。这里叫什么?没有 classxy.createOfficeProgram() 它只是 creatOffProgram() ......为什么它在正确的类中调用该方法?这对我来说毫无意义:(