抽象工厂简单地说是工厂的工厂,抽象工厂可以创建具体工厂,由具体工厂来产生具体产品。
代码实现
汽车椅子类
public interface Chair {
void run();
}
class ChairA implements Chair {
@Override
public void run() {
System.out.println("ChairA");
}
}
class ChairB implements Chair {
@Override
public void run() {
System.out.println("ChairB");
}
}
汽车发动机类
public interface Engine {
void run();
}
class EngineA implements Engine {
@Override
public void run() {
System.out.println("EngineA");
}
}
class EngineB implements Engine {
@Override
public void run() {
System.out.println("EngineB");
}
}
汽车工厂类
public interface CarFactory {
Engine createEngine();
Chair createChair();
void run();
}
汽车A工厂类
public class CarAFactory implements CarFactory {
@Override
public Engine createEngine() {
return new EngineA();
}
@Override
public Chair createChair() {
return new ChairA();
}
@Override
public void run() {
createEngine().run();
createChair().run();
}
}
汽车B工厂类
public class CarBFactory implements CarFactory {
@Override
public Engine createEngine() {
return new EngineB();
}
@Override
public Chair createChair() {
return new ChairB();
}
@Override
public void run() {
createEngine().run();
createChair().run();
}
}
测试类
public class Test {
public static void main(String[] args) {
CarFactory carAFactory = new CarAFactory();
carAFactory.run();
CarFactory carBFactory = new CarBFactory();
carBFactory.run();
}
}
结果
EngineA
ChairA
EngineB
ChairB
简单工厂、工厂方法、抽象工厂之小结、区别
简单工厂 : 用来生产同一等级结构中的任意产品。(不支持拓展增加产品)
工厂方法 :用来生产同一等级结构中的固定产品。(支持拓展增加产品)
抽象工厂 :用来生产不同产品族的全部产品。(不支持拓展增加产品;支持增加产品族)