嘿所以我试图了解工厂模式时出现以下情况:
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(字符串参数)?我不知道有关保护事物的重要事项吗?或者是因为它在SoftwareShop类中是抽象的?我根本不知道为什么这样做而不是object.createOfficeProgramm或其他什么......也许有人可以提供帮助!
答案 0 :(得分:0)
protected与private不同。可以从包和子类的类访问受保护的方法。就像在私有中一样,受保护的方法当然可以从它自己的类中访问。
SoftwareShop是一个抽象类。它只定义子类必须实现哪些方法,而不是实现功能本身。在示例代码中,MicrosoftOfficeFactory是SoftwareShop的实现,此MicrosoftOfficeFactory必须实现createOfficeProgram方法。
您可以通过以太方法向抽象类SoftwareShop添加方法或在MicrosoftOfficeFactory中重命名createOfficeProgram来检查这一点。您的IDE应该告知您MicrosoftOfficeFactory必须实现SoftwareShop的createOfficeProgram(以及所有其他方法,如果存在)。
你必须让代码生效。 ;) 试试这个MicrosoftOfficeFactory的修改版本(我没有单词等等类,所以我对它们进行了评论)。
package factory_pattern_a_method_is_assigned_to_the_object;
class MicrosoftOfficeFactory extends SoftwareShop{
@Override
protected OfficeProgramm createOfficeProgram(String zuHolendesProg) {
OfficeProgramm programm = null;
if (zuHolendesProg.equals("Textverarbeitung")) {
//programm = new Word();
System.out.println("Text w00t");
}
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;
}
public static void main(String[] nyannyan){
SoftwareShop newShop = new MicrosoftOfficeFactory();
newShop.holeApp("Textverarbeitung");
}
}
这会产生 文字
因此运行MicrosoftOfficeFactory。