小A:“工廠方法模式涉及到哪些角色?”
大B:工廠方法模式的角色有:抽象工廠(Creator)角色、具體工廠(ConcreteCreator)角色、抽象產(chǎn)品(Product)角色、具體產(chǎn)品(ConcreteProduct)角色。
抽象工廠(Creator)角色:是工廠方法模式的核心,與應(yīng)用程序無關(guān)。任何在模式中創(chuàng)建的對象的工廠類必須實現(xiàn)這個接口。
具體工廠(ConcreteCreator)角色:這是實現(xiàn)抽象工廠接口的具體工廠類,包含與應(yīng)用程序密切相關(guān)的邏輯,並且受到應(yīng)用程序調(diào)用以創(chuàng)建產(chǎn)品對象。
有兩個這樣的角色:BulbCreator與TubeCreator。
抽象產(chǎn)品(Product)角色:工廠方法模式所創(chuàng)建的對象的超類型,也就是產(chǎn)品對象的共同父類或共同擁有的接口。
具體產(chǎn)品(ConcreteProduct)角色:這個角色實現(xiàn)了抽象產(chǎn)品角色所定義的接口。某具體產(chǎn)品有專門的具體工廠創(chuàng)建,它們之間往往一一對應(yīng)。
//產(chǎn)品Plant接口
publicinterfacePlant{}
//具體產(chǎn)品PlantA,PlantB
publicclassPlantAimplementsPlant{
publicPlantA(){
System.out.println(“createPlantA!”);
}
publicvoiddoSomething(){
System.out.println(“PlantAdosomething……”);
}
}
publicclassPlantBimplementsPlant{
publicPlantB(){
System.out.println(“createPlantB!”);
}
publicvoiddoSomething(){
System.out.println(“PlantBdosomething……”);
}
}
//產(chǎn)品Fruit接口
publicinterfaceFruit{}
//具體產(chǎn)品FruitA,F(xiàn)ruitB
publicclassFruitAimplementsFruit{
publicFruitA(){
System.out.println(“createFruitA!”);
}
publicvoiddoSomething(){
System.out.println(“FruitAdosomething……”);
}
}
publicclassFruitBimplementsFruit{
publicFruitB(){
System.out.println(“createFruitB!”);
}
publicvoiddoSomething(){
System.out.println(“FruitBdosomething……”);
}
}
//抽象工廠方法
publicinterfaceAbstractFactory{
publicPlantcreatePlant();
publicFruitcreateFruit();
}
//具體工廠方法
publicclassFactoryAimplementsAbstractFactory{
publicPlantcreatePlant(){
returnnewPlantA();
}
publicFruitcreateFruit(){
returnnewFruitA();
}
}
publicclassFactoryBimplementsAbstractFactory{
publicPlantcreatePlant(){
returnnewPlantB();
}
publicFruitcreateFruit(){
returnnewFruitB();
}
}