El patrón de fábrica abstracto es crear otras fábricas alrededor de una súper fábrica. Esta súper fábrica también se llama fábrica de otras fábricas.
Categoría de negocios:
Motor:
1. Motor:
public abstract class Engine {
public abstract void createEngine();
}
1) BaoMaEngine:
public class BaoMaEngine extends Engine{
@Override
public void createEngine() {
System.out.println("宝马发动机...");
}
}
2) BenChiEngine:
public class BenChiEngine extends Engine{
@Override
public void createEngine() {
System.out.println("奔驰发动机...");
}
}
Color:
2. Color:
public abstract class Colour {
public abstract void createColour();
}
1) Rojo :
public class Red extends Colour {
@Override
public void createColour() {
System.out.println("红色喷漆...");
}
}
2) Negro :
public class Black extends Colour {
@Override
public void createColour() {
System.out.println("黑色喷漆...");
}
}
Clase de fábrica:
CarFactory:
public abstract class CarFactory {
public abstract Engine getEngine();
public abstract Colour getColour();
}
1 、 EngineFactory :
public abstract class EngineFactory extends CarFactory{
public abstract Engine getEngine();
}
1) BaoMaFactory :
public class BaoMaFactory extends EngineFactory{
@Override
public Engine getEngine() {
return new BaoMaEngine();
}
@Override
public Colour getColour() {
//Do Nothing
//此处为语法要求,没有任何世纪作用
return null;
}
}
2) BenChiFactory:
public class BenChiFactory extends EngineFactory{
@Override
public Engine getEngine() {
return new BenChiEngine();
}
@Override
public Colour getColour() {
//Do Nothing
//此处为语法要求,没有任何世纪作用
return null;
}
}
2 、 ColourFactory :
public abstract class ColourFactory extends CarFactory{
public abstract Colour getColour();
}
1) RedFactory
public class RedFactory extends ColourFactory{
@Override
public Engine getEngine() {
//Do Nothing
//此处为语法要求,没有任何世纪作用
return null;
}
@Override
public Colour getColour() {
return new Red();
}
}
2) BlackFactory
public class BlackFactory extends ColourFactory{
@Override
public Engine getEngine() {
//Do Nothing
//此处为语法要求,没有任何世纪作用
return null;
}
@Override
public Colour getColour() {
return new Black();
}
}
Prueba:
public class Test {
public static void main(String[] args) {
CarFactory carColour=new BlackFactory();
CarFactory carEngine=new BaoMaFactory();
Colour colour=carColour.getColour();
Engine engine=carEngine.getEngine();
colour.createColour();
engine.createEngine();
}
}
resultado de la operación:
黑色喷漆...
宝马发动机...