用途:抽象工厂用于生产多个产品,并且每个产品还有多个部件的情形。
package designMode.abstractFactory;
public interface EngineFactory {
void produceEngine();
}
package designMode.abstractFactory;
public class BenzEngineFactory implements EngineFactory{
@Override
public void produceEngine() {
System.out.println("抽象工厂造奔驰引擎");
}
}
package designMode.abstractFactory;
public class BmwEngineFactory implements EngineFactory{
@Override
public void produceEngine() {
System.out.println("抽象工厂造宝马引擎");
}
}
package designMode.abstractFactory;
public interface WheelFactory {
void produceWheel();
}
package designMode.abstractFactory;
public class BenzWheelFactory implements WheelFactory {
@Override
public void produceWheel() {
System.out.println("抽象工厂造奔驰轮子");
}
}
package designMode.abstractFactory;
public class BmwWheelFactory implements WheelFactory{
@Override
public void produceWheel() {
System.out.println("抽象工厂造宝马轮子");
}
}
package abstractFactory;
public interface CarFactory {
void produceEngine();
void produceWheel();
}
package abstractFactory;
public class BenzCarFactory implements CarFactory{
private EngineFactory engineFactory=new BenzEngineFactory();
private WheelFactory wheelFactory=new BenzWheelFactory();
@Override
public void produceEngine() {
engineFactory.produceEngine();
}
@Override
public void produceWheel() {
wheelFactory.produceWheel();
}
}
package abstractFactory;
public class BmwCarFactory implements CarFactory{
private EngineFactory engineFactory=new BenzEngineFactory();
private WheelFactory wheelFactory=new BmwWheelFactory();
@Override
public void produceEngine() {
engineFactory.produceEngine();
}
@Override
public void produceWheel() {
wheelFactory.produceWheel();
}
}
package abstractFactory;
public class Client {
public static void main(String[] args) {
CarFactory benzCarFactory=new BenzCarFactory();
benzCarFactory.produceEngine();
benzCarFactory.produceWheel();
CarFactory bmwCarFactory=new BmwCarFactory();
bmwCarFactory.produceEngine();
bmwCarFactory.produceWheel();
}
}
打印结果:
抽象工厂造宝马引擎
抽象工厂造奔驰轮子
抽象工厂造宝马引擎
抽象工厂造宝马轮子
小结:
1.与工厂模式相比,优势在于能生产不同产品的不同部件。