小A:“工廠方法模式涉及到哪些角色?”
大B:工廠方法模式的角色有:抽象工廠(Creator)角色、具體工廠(ConcreteCreator)角色、抽象產品(Product)角色、具體產品(ConcreteProduct)角色。
抽象工廠(Creator)角色:是工廠方法模式的核心,與應用程序無關。任何在模式中創建的對象的工廠類必須實現這個接口。
具體工廠(ConcreteCreator)角色:這是實現抽象工廠接口的具體工廠類,包含與應用程序密切相關的邏輯,並且受到應用程序調用以創建產品對象。
有兩個這樣的角色:BulbCreator與TubeCreator。
抽象產品(Product)角色:工廠方法模式所創建的對象的超類型,也就是產品對象的共同父類或共同擁有的接口。
具體產品(ConcreteProduct)角色:這個角色實現了抽象產品角色所定義的接口。某具體產品有專門的具體工廠創建,它們之間往往一一對應。
//產品Plant接口
publicinterfacePlant{}
//具體產品PlantA,PlantB
publicclassPlantAimplementsPlant{
publicPlantA(){
System.out.println(“createPlantA!”);
}
publicvoiddoSomething(){
System.out.println(“PlantAdosomething……”);
}
}
publicclassPlantBimplementsPlant{
publicPlantB(){
System.out.println(“createPlantB!”);
}
publicvoiddoSomething(){
System.out.println(“PlantBdosomething……”);
}
}
//產品Fruit接口
publicinterfaceFruit{}
//具體產品FruitA,FruitB
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();
}
}