工厂模式 - 为对象分配方法

时间:2016-11-19 01:10:45

标签: java factory

嘿所以我试图了解工厂模式时出现以下情况:

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或其他什么......也许有人可以提供帮助!

1 个答案:

答案 0 :(得分:0)

Hallo Herr Reifenberger,

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。